@webiny/aws-helpers 6.3.0 → 6.4.0-beta.1

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.
Files changed (57) hide show
  1. package/cloudfrontFunctions/cookies.js +15 -24
  2. package/cloudfrontFunctions/cookies.js.map +1 -1
  3. package/cloudfrontFunctions/headers.js +19 -20
  4. package/cloudfrontFunctions/headers.js.map +1 -1
  5. package/cloudfrontFunctions/index.js +0 -2
  6. package/cloudfrontFunctions/querystring.js +14 -24
  7. package/cloudfrontFunctions/querystring.js.map +1 -1
  8. package/cloudfrontFunctions/redirect.js +15 -17
  9. package/cloudfrontFunctions/redirect.js.map +1 -1
  10. package/cloudfrontFunctions/types.js +0 -3
  11. package/cloudfrontFunctions/utils.js +6 -19
  12. package/cloudfrontFunctions/utils.js.map +1 -1
  13. package/index.js +0 -2
  14. package/lambdaEdge/cookies.js +16 -17
  15. package/lambdaEdge/cookies.js.map +1 -1
  16. package/lambdaEdge/headers.js +7 -4
  17. package/lambdaEdge/headers.js.map +1 -1
  18. package/lambdaEdge/index.js +0 -2
  19. package/lambdaEdge/redirect.js +26 -26
  20. package/lambdaEdge/redirect.js.map +1 -1
  21. package/lambdaEdge/request.js +22 -17
  22. package/lambdaEdge/request.js.map +1 -1
  23. package/lambdaEdge/response.js +7 -6
  24. package/lambdaEdge/response.js.map +1 -1
  25. package/lambdaEdge/types.js +0 -3
  26. package/lambdaEdge/utils.js +5 -4
  27. package/lambdaEdge/utils.js.map +1 -1
  28. package/package.json +3 -3
  29. package/rslib-runtime.js +14 -0
  30. package/rslib-runtime.js.map +1 -0
  31. package/stagedRollouts/functions/adminOriginRequest.js +18 -22
  32. package/stagedRollouts/functions/adminOriginRequest.js.map +1 -1
  33. package/stagedRollouts/functions/configOriginRequest.js +44 -46
  34. package/stagedRollouts/functions/configOriginRequest.js.map +1 -1
  35. package/stagedRollouts/functions/originRequest.js +11 -10
  36. package/stagedRollouts/functions/originRequest.js.map +1 -1
  37. package/stagedRollouts/functions/viewerRequest.js +15 -35
  38. package/stagedRollouts/functions/viewerRequest.js.map +1 -1
  39. package/stagedRollouts/functions/viewerResponse.js +8 -10
  40. package/stagedRollouts/functions/viewerResponse.js.map +1 -1
  41. package/stagedRollouts/utils/common.js +5 -4
  42. package/stagedRollouts/utils/common.js.map +1 -1
  43. package/stagedRollouts/utils/headerBlacklist.js +27 -13
  44. package/stagedRollouts/utils/headerBlacklist.js.map +1 -1
  45. package/stagedRollouts/utils/loadOriginPage.js +70 -91
  46. package/stagedRollouts/utils/loadOriginPage.js.map +1 -1
  47. package/stagedRollouts/utils/loadTrafficSplittingConfig.js +35 -51
  48. package/stagedRollouts/utils/loadTrafficSplittingConfig.js.map +1 -1
  49. package/stagedRollouts/utils/loadVariantOrigin.js +41 -60
  50. package/stagedRollouts/utils/loadVariantOrigin.js.map +1 -1
  51. package/stagedRollouts/utils/log.js +3 -6
  52. package/stagedRollouts/utils/log.js.map +1 -1
  53. package/cloudfrontFunctions/index.js.map +0 -1
  54. package/cloudfrontFunctions/types.js.map +0 -1
  55. package/index.js.map +0 -1
  56. package/lambdaEdge/index.js.map +0 -1
  57. package/lambdaEdge/types.js.map +0 -1
@@ -2,29 +2,25 @@ import { defineLambdaEdgeRequestHandler, setDomainOrigin } from "../../lambdaEdg
2
2
  import { pointsToFile } from "../utils/common.js";
3
3
  import { loadOriginPage } from "../utils/loadOriginPage.js";
4
4
  import { loadVariantOrigin } from "../utils/loadVariantOrigin.js";
5
- export default defineLambdaEdgeRequestHandler(async event => {
6
- try {
7
- const result = await loadVariantOrigin(event);
8
- if ("variant" in result) {
9
- const cf = event.Records[0].cf;
10
- const request = cf.request;
11
- const variant = result.variant;
12
-
13
- // For file requests we just pass the request to proper origin.
14
- if (pointsToFile(request.uri)) {
15
- setDomainOrigin(request, variant.domain);
16
- return request;
17
- }
18
-
19
- // For pages we make a custom HTTP request to the origin and transform page properly.
20
- // For example we change asset URLs to be absolute.
21
- return await loadOriginPage(variant.domain, request.uri);
5
+ const adminOriginRequest = defineLambdaEdgeRequestHandler(async (event)=>{
6
+ try {
7
+ const result = await loadVariantOrigin(event);
8
+ if ("variant" in result) {
9
+ const cf = event.Records[0].cf;
10
+ const request = cf.request;
11
+ const variant = result.variant;
12
+ if (pointsToFile(request.uri)) {
13
+ setDomainOrigin(request, variant.domain);
14
+ return request;
15
+ }
16
+ return await loadOriginPage(variant.domain, request.uri);
17
+ }
18
+ return result;
19
+ } catch (e) {
20
+ console.error(e);
21
+ throw e;
22
22
  }
23
- return result;
24
- } catch (e) {
25
- console.error(e);
26
- throw e;
27
- }
28
23
  });
24
+ export default adminOriginRequest;
29
25
 
30
26
  //# sourceMappingURL=adminOriginRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defineLambdaEdgeRequestHandler","setDomainOrigin","pointsToFile","loadOriginPage","loadVariantOrigin","event","result","cf","Records","request","variant","uri","domain","e","console","error"],"sources":["adminOriginRequest.ts"],"sourcesContent":["import { defineLambdaEdgeRequestHandler, setDomainOrigin } from \"~/lambdaEdge/index.js\";\n\nimport { pointsToFile } from \"../utils/common.js\";\nimport { loadOriginPage } from \"../utils/loadOriginPage.js\";\nimport { loadVariantOrigin } from \"../utils/loadVariantOrigin.js\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n try {\n const result = await loadVariantOrigin(event);\n\n if (\"variant\" in result) {\n const cf = event.Records[0].cf;\n const request = cf.request;\n const variant = result.variant;\n\n // For file requests we just pass the request to proper origin.\n if (pointsToFile(request.uri)) {\n setDomainOrigin(request, variant.domain);\n return request;\n }\n\n // For pages we make a custom HTTP request to the origin and transform page properly.\n // For example we change asset URLs to be absolute.\n return await loadOriginPage(variant.domain, request.uri);\n }\n return result;\n } catch (e) {\n console.error(e);\n throw e;\n }\n});\n"],"mappings":"AAAA,SAASA,8BAA8B,EAAEC,eAAe;AAExD,SAASC,YAAY;AACrB,SAASC,cAAc;AACvB,SAASC,iBAAiB;AAE1B,eAAeJ,8BAA8B,CAAC,MAAMK,KAAK,IAAI;EACzD,IAAI;IACA,MAAMC,MAAM,GAAG,MAAMF,iBAAiB,CAACC,KAAK,CAAC;IAE7C,IAAI,SAAS,IAAIC,MAAM,EAAE;MACrB,MAAMC,EAAE,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,CAACD,EAAE;MAC9B,MAAME,OAAO,GAAGF,EAAE,CAACE,OAAO;MAC1B,MAAMC,OAAO,GAAGJ,MAAM,CAACI,OAAO;;MAE9B;MACA,IAAIR,YAAY,CAACO,OAAO,CAACE,GAAG,CAAC,EAAE;QAC3BV,eAAe,CAACQ,OAAO,EAAEC,OAAO,CAACE,MAAM,CAAC;QACxC,OAAOH,OAAO;MAClB;;MAEA;MACA;MACA,OAAO,MAAMN,cAAc,CAACO,OAAO,CAACE,MAAM,EAAEH,OAAO,CAACE,GAAG,CAAC;IAC5D;IACA,OAAOL,MAAM;EACjB,CAAC,CAAC,OAAOO,CAAC,EAAE;IACRC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,MAAMA,CAAC;EACX;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/functions/adminOriginRequest.js","sources":["../../../src/stagedRollouts/functions/adminOriginRequest.ts"],"sourcesContent":["import { defineLambdaEdgeRequestHandler, setDomainOrigin } from \"~/lambdaEdge/index.js\";\n\nimport { pointsToFile } from \"../utils/common.js\";\nimport { loadOriginPage } from \"../utils/loadOriginPage.js\";\nimport { loadVariantOrigin } from \"../utils/loadVariantOrigin.js\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n try {\n const result = await loadVariantOrigin(event);\n\n if (\"variant\" in result) {\n const cf = event.Records[0].cf;\n const request = cf.request;\n const variant = result.variant;\n\n // For file requests we just pass the request to proper origin.\n if (pointsToFile(request.uri)) {\n setDomainOrigin(request, variant.domain);\n return request;\n }\n\n // For pages we make a custom HTTP request to the origin and transform page properly.\n // For example we change asset URLs to be absolute.\n return await loadOriginPage(variant.domain, request.uri);\n }\n return result;\n } catch (e) {\n console.error(e);\n throw e;\n }\n});\n"],"names":["defineLambdaEdgeRequestHandler","event","result","loadVariantOrigin","cf","request","variant","pointsToFile","setDomainOrigin","loadOriginPage","e","console"],"mappings":";;;;AAMA,2BAAeA,+BAA+B,OAAMC;IAChD,IAAI;QACA,MAAMC,SAAS,MAAMC,kBAAkBF;QAEvC,IAAI,aAAaC,QAAQ;YACrB,MAAME,KAAKH,MAAM,OAAO,CAAC,EAAE,CAAC,EAAE;YAC9B,MAAMI,UAAUD,GAAG,OAAO;YAC1B,MAAME,UAAUJ,OAAO,OAAO;YAG9B,IAAIK,aAAaF,QAAQ,GAAG,GAAG;gBAC3BG,gBAAgBH,SAASC,QAAQ,MAAM;gBACvC,OAAOD;YACX;YAIA,OAAO,MAAMI,eAAeH,QAAQ,MAAM,EAAED,QAAQ,GAAG;QAC3D;QACA,OAAOH;IACX,EAAE,OAAOQ,GAAG;QACRC,QAAQ,KAAK,CAACD;QACd,MAAMA;IACV;AACJ"}
@@ -1,54 +1,52 @@
1
1
  import { defineLambdaEdgeRequestHandler, setHeader } from "../../lambdaEdge/index.js";
2
2
  import { get } from "https";
3
- export default defineLambdaEdgeRequestHandler(async event => {
4
- try {
5
- const configJson = await loadConfigJson(event);
6
- const response = {
7
- status: "200",
8
- statusDescription: "OK",
9
- headers: {},
10
- body: configJson
11
- };
12
- setHeader(response.headers, {
13
- key: "Content-Type",
14
- value: "application/json"
15
- });
16
- setHeader(response.headers, {
17
- key: "Cache-Control",
18
- value: "public, max-age=31536000"
19
- });
20
- return response;
21
- } catch (e) {
22
- console.error(e);
23
- throw e;
24
- }
3
+ const configOriginRequest = defineLambdaEdgeRequestHandler(async (event)=>{
4
+ try {
5
+ const configJson = await loadConfigJson(event);
6
+ const response = {
7
+ status: "200",
8
+ statusDescription: "OK",
9
+ headers: {},
10
+ body: configJson
11
+ };
12
+ setHeader(response.headers, {
13
+ key: "Content-Type",
14
+ value: "application/json"
15
+ });
16
+ setHeader(response.headers, {
17
+ key: "Cache-Control",
18
+ value: "public, max-age=31536000"
19
+ });
20
+ return response;
21
+ } catch (e) {
22
+ console.error(e);
23
+ throw e;
24
+ }
25
25
  });
26
26
  function loadConfigJson(event) {
27
- return new Promise((resolve, reject) => {
28
- let dataString = "";
29
-
30
- // Retrieve domain of the CloudFront distribution.
31
- const domain = event.Records[0].cf.config.distributionDomainName;
32
- const req = get({
33
- hostname: domain,
34
- port: 443,
35
- // TODO: we will call WCP instead of a static file here
36
- path: "/_config.json"
37
- }, function (res) {
38
- res.on("data", chunk => {
39
- dataString += chunk;
40
- });
41
- res.on("end", () => {
42
- resolve(dataString);
43
- });
44
- });
45
- req.on("error", e => {
46
- reject({
47
- statusCode: 500,
48
- body: e.message
49
- });
27
+ return new Promise((resolve, reject)=>{
28
+ let dataString = "";
29
+ const domain = event.Records[0].cf.config.distributionDomainName;
30
+ const req = get({
31
+ hostname: domain,
32
+ port: 443,
33
+ path: "/_config.json"
34
+ }, function(res) {
35
+ res.on("data", (chunk)=>{
36
+ dataString += chunk;
37
+ });
38
+ res.on("end", ()=>{
39
+ resolve(dataString);
40
+ });
41
+ });
42
+ req.on("error", (e)=>{
43
+ reject({
44
+ statusCode: 500,
45
+ body: e.message
46
+ });
47
+ });
50
48
  });
51
- });
52
49
  }
50
+ export default configOriginRequest;
53
51
 
54
52
  //# sourceMappingURL=configOriginRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defineLambdaEdgeRequestHandler","setHeader","get","event","configJson","loadConfigJson","response","status","statusDescription","headers","body","key","value","e","console","error","Promise","resolve","reject","dataString","domain","Records","cf","config","distributionDomainName","req","hostname","port","path","res","on","chunk","statusCode","message"],"sources":["configOriginRequest.ts"],"sourcesContent":["import type { CloudFrontRequestEvent, CloudFrontResponse } from \"~/lambdaEdge/index.js\";\nimport { defineLambdaEdgeRequestHandler, setHeader } from \"~/lambdaEdge/index.js\";\n\nimport { get } from \"https\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n try {\n const configJson = await loadConfigJson(event);\n const response: CloudFrontResponse = {\n status: \"200\",\n statusDescription: \"OK\",\n headers: {},\n body: configJson\n };\n\n setHeader(response.headers, {\n key: \"Content-Type\",\n value: \"application/json\"\n });\n\n setHeader(response.headers, {\n key: \"Cache-Control\",\n value: \"public, max-age=31536000\"\n });\n\n return response;\n } catch (e) {\n console.error(e);\n throw e;\n }\n});\n\nfunction loadConfigJson(event: CloudFrontRequestEvent) {\n return new Promise<string>((resolve, reject) => {\n let dataString = \"\";\n\n // Retrieve domain of the CloudFront distribution.\n const domain = event.Records[0].cf.config.distributionDomainName;\n\n const req = get(\n {\n hostname: domain,\n port: 443,\n // TODO: we will call WCP instead of a static file here\n path: \"/_config.json\"\n },\n function (res) {\n res.on(\"data\", chunk => {\n dataString += chunk;\n });\n res.on(\"end\", () => {\n resolve(dataString);\n });\n }\n );\n\n req.on(\"error\", e => {\n reject({\n statusCode: 500,\n body: e.message\n });\n });\n });\n}\n"],"mappings":"AACA,SAASA,8BAA8B,EAAEC,SAAS;AAElD,SAASC,GAAG,QAAQ,OAAO;AAE3B,eAAeF,8BAA8B,CAAC,MAAMG,KAAK,IAAI;EACzD,IAAI;IACA,MAAMC,UAAU,GAAG,MAAMC,cAAc,CAACF,KAAK,CAAC;IAC9C,MAAMG,QAA4B,GAAG;MACjCC,MAAM,EAAE,KAAK;MACbC,iBAAiB,EAAE,IAAI;MACvBC,OAAO,EAAE,CAAC,CAAC;MACXC,IAAI,EAAEN;IACV,CAAC;IAEDH,SAAS,CAACK,QAAQ,CAACG,OAAO,EAAE;MACxBE,GAAG,EAAE,cAAc;MACnBC,KAAK,EAAE;IACX,CAAC,CAAC;IAEFX,SAAS,CAACK,QAAQ,CAACG,OAAO,EAAE;MACxBE,GAAG,EAAE,eAAe;MACpBC,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAON,QAAQ;EACnB,CAAC,CAAC,OAAOO,CAAC,EAAE;IACRC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,MAAMA,CAAC;EACX;AACJ,CAAC,CAAC;AAEF,SAASR,cAAcA,CAACF,KAA6B,EAAE;EACnD,OAAO,IAAIa,OAAO,CAAS,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC5C,IAAIC,UAAU,GAAG,EAAE;;IAEnB;IACA,MAAMC,MAAM,GAAGjB,KAAK,CAACkB,OAAO,CAAC,CAAC,CAAC,CAACC,EAAE,CAACC,MAAM,CAACC,sBAAsB;IAEhE,MAAMC,GAAG,GAAGvB,GAAG,CACX;MACIwB,QAAQ,EAAEN,MAAM;MAChBO,IAAI,EAAE,GAAG;MACT;MACAC,IAAI,EAAE;IACV,CAAC,EACD,UAAUC,GAAG,EAAE;MACXA,GAAG,CAACC,EAAE,CAAC,MAAM,EAAEC,KAAK,IAAI;QACpBZ,UAAU,IAAIY,KAAK;MACvB,CAAC,CAAC;MACFF,GAAG,CAACC,EAAE,CAAC,KAAK,EAAE,MAAM;QAChBb,OAAO,CAACE,UAAU,CAAC;MACvB,CAAC,CAAC;IACN,CACJ,CAAC;IAEDM,GAAG,CAACK,EAAE,CAAC,OAAO,EAAEjB,CAAC,IAAI;MACjBK,MAAM,CAAC;QACHc,UAAU,EAAE,GAAG;QACftB,IAAI,EAAEG,CAAC,CAACoB;MACZ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC,CAAC;AACN","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/functions/configOriginRequest.js","sources":["../../../src/stagedRollouts/functions/configOriginRequest.ts"],"sourcesContent":["import type { CloudFrontRequestEvent, CloudFrontResponse } from \"~/lambdaEdge/index.js\";\nimport { defineLambdaEdgeRequestHandler, setHeader } from \"~/lambdaEdge/index.js\";\n\nimport { get } from \"https\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n try {\n const configJson = await loadConfigJson(event);\n const response: CloudFrontResponse = {\n status: \"200\",\n statusDescription: \"OK\",\n headers: {},\n body: configJson\n };\n\n setHeader(response.headers, {\n key: \"Content-Type\",\n value: \"application/json\"\n });\n\n setHeader(response.headers, {\n key: \"Cache-Control\",\n value: \"public, max-age=31536000\"\n });\n\n return response;\n } catch (e) {\n console.error(e);\n throw e;\n }\n});\n\nfunction loadConfigJson(event: CloudFrontRequestEvent) {\n return new Promise<string>((resolve, reject) => {\n let dataString = \"\";\n\n // Retrieve domain of the CloudFront distribution.\n const domain = event.Records[0].cf.config.distributionDomainName;\n\n const req = get(\n {\n hostname: domain,\n port: 443,\n // TODO: we will call WCP instead of a static file here\n path: \"/_config.json\"\n },\n function (res) {\n res.on(\"data\", chunk => {\n dataString += chunk;\n });\n res.on(\"end\", () => {\n resolve(dataString);\n });\n }\n );\n\n req.on(\"error\", e => {\n reject({\n statusCode: 500,\n body: e.message\n });\n });\n });\n}\n"],"names":["defineLambdaEdgeRequestHandler","event","configJson","loadConfigJson","response","setHeader","e","console","Promise","resolve","reject","dataString","domain","req","get","res","chunk"],"mappings":";;AAKA,4BAAeA,+BAA+B,OAAMC;IAChD,IAAI;QACA,MAAMC,aAAa,MAAMC,eAAeF;QACxC,MAAMG,WAA+B;YACjC,QAAQ;YACR,mBAAmB;YACnB,SAAS,CAAC;YACV,MAAMF;QACV;QAEAG,UAAUD,SAAS,OAAO,EAAE;YACxB,KAAK;YACL,OAAO;QACX;QAEAC,UAAUD,SAAS,OAAO,EAAE;YACxB,KAAK;YACL,OAAO;QACX;QAEA,OAAOA;IACX,EAAE,OAAOE,GAAG;QACRC,QAAQ,KAAK,CAACD;QACd,MAAMA;IACV;AACJ;AAEA,SAASH,eAAeF,KAA6B;IACjD,OAAO,IAAIO,QAAgB,CAACC,SAASC;QACjC,IAAIC,aAAa;QAGjB,MAAMC,SAASX,MAAM,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB;QAEhE,MAAMY,MAAMC,IACR;YACI,UAAUF;YACV,MAAM;YAEN,MAAM;QACV,GACA,SAAUG,GAAG;YACTA,IAAI,EAAE,CAAC,QAAQC,CAAAA;gBACXL,cAAcK;YAClB;YACAD,IAAI,EAAE,CAAC,OAAO;gBACVN,QAAQE;YACZ;QACJ;QAGJE,IAAI,EAAE,CAAC,SAASP,CAAAA;YACZI,OAAO;gBACH,YAAY;gBACZ,MAAMJ,EAAE,OAAO;YACnB;QACJ;IACJ;AACJ"}
@@ -1,15 +1,16 @@
1
1
  import { defineLambdaEdgeRequestHandler, setDomainOrigin } from "../../lambdaEdge/index.js";
2
2
  import { loadVariantOrigin } from "../utils/loadVariantOrigin.js";
3
- export default defineLambdaEdgeRequestHandler(async event => {
4
- const result = await loadVariantOrigin(event);
5
- if ("variant" in result) {
6
- const cf = event.Records[0].cf;
7
- const request = cf.request;
8
- const variant = result.variant;
9
- setDomainOrigin(request, variant.domain);
10
- return request;
11
- }
12
- return result;
3
+ const originRequest = defineLambdaEdgeRequestHandler(async (event)=>{
4
+ const result = await loadVariantOrigin(event);
5
+ if ("variant" in result) {
6
+ const cf = event.Records[0].cf;
7
+ const request = cf.request;
8
+ const variant = result.variant;
9
+ setDomainOrigin(request, variant.domain);
10
+ return request;
11
+ }
12
+ return result;
13
13
  });
14
+ export default originRequest;
14
15
 
15
16
  //# sourceMappingURL=originRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defineLambdaEdgeRequestHandler","setDomainOrigin","loadVariantOrigin","event","result","cf","Records","request","variant","domain"],"sources":["originRequest.ts"],"sourcesContent":["import { defineLambdaEdgeRequestHandler, setDomainOrigin } from \"~/lambdaEdge/index.js\";\n\nimport { loadVariantOrigin } from \"../utils/loadVariantOrigin.js\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n const result = await loadVariantOrigin(event);\n\n if (\"variant\" in result) {\n const cf = event.Records[0].cf;\n const request = cf.request;\n const variant = result.variant;\n\n setDomainOrigin(request, variant.domain);\n return request;\n }\n\n return result;\n});\n"],"mappings":"AAAA,SAASA,8BAA8B,EAAEC,eAAe;AAExD,SAASC,iBAAiB;AAE1B,eAAeF,8BAA8B,CAAC,MAAMG,KAAK,IAAI;EACzD,MAAMC,MAAM,GAAG,MAAMF,iBAAiB,CAACC,KAAK,CAAC;EAE7C,IAAI,SAAS,IAAIC,MAAM,EAAE;IACrB,MAAMC,EAAE,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,CAACD,EAAE;IAC9B,MAAME,OAAO,GAAGF,EAAE,CAACE,OAAO;IAC1B,MAAMC,OAAO,GAAGJ,MAAM,CAACI,OAAO;IAE9BP,eAAe,CAACM,OAAO,EAAEC,OAAO,CAACC,MAAM,CAAC;IACxC,OAAOF,OAAO;EAClB;EAEA,OAAOH,MAAM;AACjB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/functions/originRequest.js","sources":["../../../src/stagedRollouts/functions/originRequest.ts"],"sourcesContent":["import { defineLambdaEdgeRequestHandler, setDomainOrigin } from \"~/lambdaEdge/index.js\";\n\nimport { loadVariantOrigin } from \"../utils/loadVariantOrigin.js\";\n\nexport default defineLambdaEdgeRequestHandler(async event => {\n const result = await loadVariantOrigin(event);\n\n if (\"variant\" in result) {\n const cf = event.Records[0].cf;\n const request = cf.request;\n const variant = result.variant;\n\n setDomainOrigin(request, variant.domain);\n return request;\n }\n\n return result;\n});\n"],"names":["defineLambdaEdgeRequestHandler","event","result","loadVariantOrigin","cf","request","variant","setDomainOrigin"],"mappings":";;AAIA,sBAAeA,+BAA+B,OAAMC;IAChD,MAAMC,SAAS,MAAMC,kBAAkBF;IAEvC,IAAI,aAAaC,QAAQ;QACrB,MAAME,KAAKH,MAAM,OAAO,CAAC,EAAE,CAAC,EAAE;QAC9B,MAAMI,UAAUD,GAAG,OAAO;QAC1B,MAAME,UAAUJ,OAAO,OAAO;QAE9BK,gBAAgBF,SAASC,QAAQ,MAAM;QACvC,OAAOD;IACX;IAEA,OAAOH;AACX"}
@@ -1,42 +1,22 @@
1
1
  import { defineCloudfrontFunctionRequestHandler } from "../../cloudfrontFunctions/index.js";
2
2
  import { variantFixedKey, variantRandomKey } from "../utils/common.js";
3
- defineCloudfrontFunctionRequestHandler(event => {
4
- const request = event.request;
5
-
6
- // Try to get stage name from cookie or header.
7
- const variantFixed = request.cookies?.[variantFixedKey]?.value || request.headers[variantFixedKey]?.value;
8
- if (variantFixed) {
9
- // If there is a fixed variant set, we just pass it further to origin request handler.
10
- request.headers[variantFixedKey] = {
11
- value: variantFixed
3
+ defineCloudfrontFunctionRequestHandler((event)=>{
4
+ const request = event.request;
5
+ const variantFixed = request.cookies?.[variantFixedKey]?.value || request.headers[variantFixedKey]?.value;
6
+ if (variantFixed) {
7
+ request.headers[variantFixedKey] = {
8
+ value: variantFixed
9
+ };
10
+ delete request.headers[variantRandomKey];
11
+ return request;
12
+ }
13
+ let variantRandom = Number(request.cookies?.[variantRandomKey]?.value);
14
+ if (isNaN(variantRandom) || variantRandom < 1 || variantRandom > 100) variantRandom = Math.floor(100 * Math.random() + 1);
15
+ variantRandom -= variantRandom % 5;
16
+ request.headers[variantRandomKey] = {
17
+ value: variantRandom.toString()
12
18
  };
13
-
14
- // If variant is explicitly selected, remove any random header a user may have passed.
15
- // We want to have either one or another for better cache hit rate.
16
- delete request.headers[variantRandomKey];
17
19
  return request;
18
- }
19
-
20
- // Otherwise we try to retrieve randomized number from user cookie.
21
- // This random value will be passed further to the origin request to select based on config.
22
- let variantRandom = Number(request.cookies?.[variantRandomKey]?.value);
23
- if (isNaN(variantRandom) || variantRandom < 1 || variantRandom > 100) {
24
- // If no value is present we simply randomize one.
25
- // This formula gives you an integer 1-100 (inclusive).
26
- // This way we have exactly 100 possible values.
27
- // Math.random() return values in range [0, 1) - 0 inclusive, 1 exclusive.
28
- // So we need to adjust it a litte bit to achieve what we want.
29
- variantRandom = Math.floor(Math.random() * 100 + 1);
30
- }
31
-
32
- // Adjust random value to a specific interval optimize caching.
33
- // Less possible values means less separate cache entries in CDN an better cache hit ratio.
34
- // TODO this value can set during deployment, to allow users to decide on trade-off between better caching and finer traffic splitting
35
- variantRandom -= variantRandom % 5;
36
- request.headers[variantRandomKey] = {
37
- value: variantRandom.toString()
38
- };
39
- return request;
40
20
  });
41
21
 
42
22
  //# sourceMappingURL=viewerRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defineCloudfrontFunctionRequestHandler","variantFixedKey","variantRandomKey","event","request","variantFixed","cookies","value","headers","variantRandom","Number","isNaN","Math","floor","random","toString"],"sources":["viewerRequest.ts"],"sourcesContent":["import { defineCloudfrontFunctionRequestHandler } from \"~/cloudfrontFunctions/index.js\";\n\nimport { variantFixedKey, variantRandomKey } from \"../utils/common.js\";\n\ndefineCloudfrontFunctionRequestHandler(event => {\n const request = event.request;\n\n // Try to get stage name from cookie or header.\n const variantFixed =\n request.cookies?.[variantFixedKey]?.value || request.headers[variantFixedKey]?.value;\n if (variantFixed) {\n // If there is a fixed variant set, we just pass it further to origin request handler.\n request.headers[variantFixedKey] = {\n value: variantFixed\n };\n\n // If variant is explicitly selected, remove any random header a user may have passed.\n // We want to have either one or another for better cache hit rate.\n delete request.headers[variantRandomKey];\n return request;\n }\n\n // Otherwise we try to retrieve randomized number from user cookie.\n // This random value will be passed further to the origin request to select based on config.\n let variantRandom = Number(request.cookies?.[variantRandomKey]?.value);\n if (isNaN(variantRandom) || variantRandom < 1 || variantRandom > 100) {\n // If no value is present we simply randomize one.\n // This formula gives you an integer 1-100 (inclusive).\n // This way we have exactly 100 possible values.\n // Math.random() return values in range [0, 1) - 0 inclusive, 1 exclusive.\n // So we need to adjust it a litte bit to achieve what we want.\n variantRandom = Math.floor(Math.random() * 100 + 1);\n }\n\n // Adjust random value to a specific interval optimize caching.\n // Less possible values means less separate cache entries in CDN an better cache hit ratio.\n // TODO this value can set during deployment, to allow users to decide on trade-off between better caching and finer traffic splitting\n variantRandom -= variantRandom % 5;\n\n request.headers[variantRandomKey] = {\n value: variantRandom.toString()\n };\n\n return request;\n});\n"],"mappings":"AAAA,SAASA,sCAAsC;AAE/C,SAASC,eAAe,EAAEC,gBAAgB;AAE1CF,sCAAsC,CAACG,KAAK,IAAI;EAC5C,MAAMC,OAAO,GAAGD,KAAK,CAACC,OAAO;;EAE7B;EACA,MAAMC,YAAY,GACdD,OAAO,CAACE,OAAO,GAAGL,eAAe,CAAC,EAAEM,KAAK,IAAIH,OAAO,CAACI,OAAO,CAACP,eAAe,CAAC,EAAEM,KAAK;EACxF,IAAIF,YAAY,EAAE;IACd;IACAD,OAAO,CAACI,OAAO,CAACP,eAAe,CAAC,GAAG;MAC/BM,KAAK,EAAEF;IACX,CAAC;;IAED;IACA;IACA,OAAOD,OAAO,CAACI,OAAO,CAACN,gBAAgB,CAAC;IACxC,OAAOE,OAAO;EAClB;;EAEA;EACA;EACA,IAAIK,aAAa,GAAGC,MAAM,CAACN,OAAO,CAACE,OAAO,GAAGJ,gBAAgB,CAAC,EAAEK,KAAK,CAAC;EACtE,IAAII,KAAK,CAACF,aAAa,CAAC,IAAIA,aAAa,GAAG,CAAC,IAAIA,aAAa,GAAG,GAAG,EAAE;IAClE;IACA;IACA;IACA;IACA;IACAA,aAAa,GAAGG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;EACvD;;EAEA;EACA;EACA;EACAL,aAAa,IAAIA,aAAa,GAAG,CAAC;EAElCL,OAAO,CAACI,OAAO,CAACN,gBAAgB,CAAC,GAAG;IAChCK,KAAK,EAAEE,aAAa,CAACM,QAAQ,CAAC;EAClC,CAAC;EAED,OAAOX,OAAO;AAClB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/functions/viewerRequest.js","sources":["../../../src/stagedRollouts/functions/viewerRequest.ts"],"sourcesContent":["import { defineCloudfrontFunctionRequestHandler } from \"~/cloudfrontFunctions/index.js\";\n\nimport { variantFixedKey, variantRandomKey } from \"../utils/common.js\";\n\ndefineCloudfrontFunctionRequestHandler(event => {\n const request = event.request;\n\n // Try to get stage name from cookie or header.\n const variantFixed =\n request.cookies?.[variantFixedKey]?.value || request.headers[variantFixedKey]?.value;\n if (variantFixed) {\n // If there is a fixed variant set, we just pass it further to origin request handler.\n request.headers[variantFixedKey] = {\n value: variantFixed\n };\n\n // If variant is explicitly selected, remove any random header a user may have passed.\n // We want to have either one or another for better cache hit rate.\n delete request.headers[variantRandomKey];\n return request;\n }\n\n // Otherwise we try to retrieve randomized number from user cookie.\n // This random value will be passed further to the origin request to select based on config.\n let variantRandom = Number(request.cookies?.[variantRandomKey]?.value);\n if (isNaN(variantRandom) || variantRandom < 1 || variantRandom > 100) {\n // If no value is present we simply randomize one.\n // This formula gives you an integer 1-100 (inclusive).\n // This way we have exactly 100 possible values.\n // Math.random() return values in range [0, 1) - 0 inclusive, 1 exclusive.\n // So we need to adjust it a litte bit to achieve what we want.\n variantRandom = Math.floor(Math.random() * 100 + 1);\n }\n\n // Adjust random value to a specific interval optimize caching.\n // Less possible values means less separate cache entries in CDN an better cache hit ratio.\n // TODO this value can set during deployment, to allow users to decide on trade-off between better caching and finer traffic splitting\n variantRandom -= variantRandom % 5;\n\n request.headers[variantRandomKey] = {\n value: variantRandom.toString()\n };\n\n return request;\n});\n"],"names":["defineCloudfrontFunctionRequestHandler","event","request","variantFixed","variantFixedKey","variantRandomKey","variantRandom","Number","isNaN","Math"],"mappings":";;AAIAA,uCAAuCC,CAAAA;IACnC,MAAMC,UAAUD,MAAM,OAAO;IAG7B,MAAME,eACFD,QAAQ,OAAO,EAAE,CAACE,gBAAgB,EAAE,SAASF,QAAQ,OAAO,CAACE,gBAAgB,EAAE;IACnF,IAAID,cAAc;QAEdD,QAAQ,OAAO,CAACE,gBAAgB,GAAG;YAC/B,OAAOD;QACX;QAIA,OAAOD,QAAQ,OAAO,CAACG,iBAAiB;QACxC,OAAOH;IACX;IAIA,IAAII,gBAAgBC,OAAOL,QAAQ,OAAO,EAAE,CAACG,iBAAiB,EAAE;IAChE,IAAIG,MAAMF,kBAAkBA,gBAAgB,KAAKA,gBAAgB,KAM7DA,gBAAgBG,KAAK,KAAK,CAACA,AAAgB,MAAhBA,KAAK,MAAM,KAAW;IAMrDH,iBAAiBA,gBAAgB;IAEjCJ,QAAQ,OAAO,CAACG,iBAAiB,GAAG;QAChC,OAAOC,cAAc,QAAQ;IACjC;IAEA,OAAOJ;AACX"}
@@ -1,16 +1,14 @@
1
1
  import { defineCloudfrontFunctionResponseHandler, setResponseCookie } from "../../cloudfrontFunctions/index.js";
2
2
  import { variantRandomKey } from "../utils/common.js";
3
- defineCloudfrontFunctionResponseHandler(event => {
4
- const request = event.request;
5
- const response = event.response;
6
- const variantRandom = request.headers[variantRandomKey]?.value;
7
- if (variantRandom) {
8
- setResponseCookie(response, {
9
- name: variantRandomKey,
10
- value: variantRandom
3
+ defineCloudfrontFunctionResponseHandler((event)=>{
4
+ const request = event.request;
5
+ const response = event.response;
6
+ const variantRandom = request.headers[variantRandomKey]?.value;
7
+ if (variantRandom) setResponseCookie(response, {
8
+ name: variantRandomKey,
9
+ value: variantRandom
11
10
  });
12
- }
13
- return response;
11
+ return response;
14
12
  });
15
13
 
16
14
  //# sourceMappingURL=viewerResponse.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defineCloudfrontFunctionResponseHandler","setResponseCookie","variantRandomKey","event","request","response","variantRandom","headers","value","name"],"sources":["viewerResponse.ts"],"sourcesContent":["import {\n defineCloudfrontFunctionResponseHandler,\n setResponseCookie\n} from \"~/cloudfrontFunctions/index.js\";\n\nimport { variantRandomKey } from \"../utils/common.js\";\n\ndefineCloudfrontFunctionResponseHandler(event => {\n const request = event.request;\n const response = event.response;\n\n const variantRandom = request.headers[variantRandomKey]?.value;\n if (variantRandom) {\n setResponseCookie(response, {\n name: variantRandomKey,\n value: variantRandom\n });\n }\n\n return response;\n});\n"],"mappings":"AAAA,SACIA,uCAAuC,EACvCC,iBAAiB;AAGrB,SAASC,gBAAgB;AAEzBF,uCAAuC,CAACG,KAAK,IAAI;EAC7C,MAAMC,OAAO,GAAGD,KAAK,CAACC,OAAO;EAC7B,MAAMC,QAAQ,GAAGF,KAAK,CAACE,QAAQ;EAE/B,MAAMC,aAAa,GAAGF,OAAO,CAACG,OAAO,CAACL,gBAAgB,CAAC,EAAEM,KAAK;EAC9D,IAAIF,aAAa,EAAE;IACfL,iBAAiB,CAACI,QAAQ,EAAE;MACxBI,IAAI,EAAEP,gBAAgB;MACtBM,KAAK,EAAEF;IACX,CAAC,CAAC;EACN;EAEA,OAAOD,QAAQ;AACnB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/functions/viewerResponse.js","sources":["../../../src/stagedRollouts/functions/viewerResponse.ts"],"sourcesContent":["import {\n defineCloudfrontFunctionResponseHandler,\n setResponseCookie\n} from \"~/cloudfrontFunctions/index.js\";\n\nimport { variantRandomKey } from \"../utils/common.js\";\n\ndefineCloudfrontFunctionResponseHandler(event => {\n const request = event.request;\n const response = event.response;\n\n const variantRandom = request.headers[variantRandomKey]?.value;\n if (variantRandom) {\n setResponseCookie(response, {\n name: variantRandomKey,\n value: variantRandom\n });\n }\n\n return response;\n});\n"],"names":["defineCloudfrontFunctionResponseHandler","event","request","response","variantRandom","variantRandomKey","setResponseCookie"],"mappings":";;AAOAA,wCAAwCC,CAAAA;IACpC,MAAMC,UAAUD,MAAM,OAAO;IAC7B,MAAME,WAAWF,MAAM,QAAQ;IAE/B,MAAMG,gBAAgBF,QAAQ,OAAO,CAACG,iBAAiB,EAAE;IACzD,IAAID,eACAE,kBAAkBH,UAAU;QACxB,MAAME;QACN,OAAOD;IACX;IAGJ,OAAOD;AACX"}
@@ -1,7 +1,8 @@
1
- export const variantFixedKey = "webiny-variant-fixed";
2
- export const variantRandomKey = "webiny-variant-random";
3
- export function pointsToFile(uri) {
4
- return /\/[^/]+\.[^/]+$/.test(uri);
1
+ const variantFixedKey = "webiny-variant-fixed";
2
+ const variantRandomKey = "webiny-variant-random";
3
+ function pointsToFile(uri) {
4
+ return /\/[^/]+\.[^/]+$/.test(uri);
5
5
  }
6
+ export { pointsToFile, variantFixedKey, variantRandomKey };
6
7
 
7
8
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["variantFixedKey","variantRandomKey","pointsToFile","uri","test"],"sources":["common.ts"],"sourcesContent":["export const variantFixedKey = \"webiny-variant-fixed\";\nexport const variantRandomKey = \"webiny-variant-random\";\n\nexport function pointsToFile(uri: string) {\n return /\\/[^/]+\\.[^/]+$/.test(uri);\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAe,GAAG,sBAAsB;AACrD,OAAO,MAAMC,gBAAgB,GAAG,uBAAuB;AAEvD,OAAO,SAASC,YAAYA,CAACC,GAAW,EAAE;EACtC,OAAO,iBAAiB,CAACC,IAAI,CAACD,GAAG,CAAC;AACtC","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/utils/common.js","sources":["../../../src/stagedRollouts/utils/common.ts"],"sourcesContent":["export const variantFixedKey = \"webiny-variant-fixed\";\nexport const variantRandomKey = \"webiny-variant-random\";\n\nexport function pointsToFile(uri: string) {\n return /\\/[^/]+\\.[^/]+$/.test(uri);\n}\n"],"names":["variantFixedKey","variantRandomKey","pointsToFile","uri"],"mappings":"AAAO,MAAMA,kBAAkB;AACxB,MAAMC,mBAAmB;AAEzB,SAASC,aAAaC,GAAW;IACpC,OAAO,kBAAkB,IAAI,CAACA;AAClC"}
@@ -1,17 +1,31 @@
1
1
  const blacklistedHeaders = new Set([
2
- // blacklisted headers
3
- "connection", "expect", "keep-Alive", "proxy-authenticate", "proxy-authorization", "proxy-connection", "trailer", "upgrade", "x-accel-buffering", "x-accel-charset", "x-accel-limit-rate", "x-accel-redirect", "x-cache", "x-forwarded-proto", "x-real-op",
4
- // readonly headers
5
- "content-length", "transfer-encoding", "via"]);
6
- const blacklistedHeadersRegex = [/^x-amz-cf-/, /^x-edge-/];
7
-
8
- /**
9
- * Some headers cannot be modified with lambda edge.
10
- * Source: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html
11
- */
12
- export function isHeaderBlacklisted(header) {
13
- header = header.toLocaleLowerCase();
14
- return blacklistedHeaders.has(header) || blacklistedHeadersRegex.some(r => r.test(header));
2
+ "connection",
3
+ "expect",
4
+ "keep-Alive",
5
+ "proxy-authenticate",
6
+ "proxy-authorization",
7
+ "proxy-connection",
8
+ "trailer",
9
+ "upgrade",
10
+ "x-accel-buffering",
11
+ "x-accel-charset",
12
+ "x-accel-limit-rate",
13
+ "x-accel-redirect",
14
+ "x-cache",
15
+ "x-forwarded-proto",
16
+ "x-real-op",
17
+ "content-length",
18
+ "transfer-encoding",
19
+ "via"
20
+ ]);
21
+ const blacklistedHeadersRegex = [
22
+ /^x-amz-cf-/,
23
+ /^x-edge-/
24
+ ];
25
+ function isHeaderBlacklisted(header) {
26
+ header = header.toLocaleLowerCase();
27
+ return blacklistedHeaders.has(header) || blacklistedHeadersRegex.some((r)=>r.test(header));
15
28
  }
29
+ export { isHeaderBlacklisted };
16
30
 
17
31
  //# sourceMappingURL=headerBlacklist.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["blacklistedHeaders","Set","blacklistedHeadersRegex","isHeaderBlacklisted","header","toLocaleLowerCase","has","some","r","test"],"sources":["headerBlacklist.ts"],"sourcesContent":["const blacklistedHeaders = new Set([\n // blacklisted headers\n \"connection\",\n \"expect\",\n \"keep-Alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"proxy-connection\",\n \"trailer\",\n \"upgrade\",\n \"x-accel-buffering\",\n \"x-accel-charset\",\n \"x-accel-limit-rate\",\n \"x-accel-redirect\",\n \"x-cache\",\n \"x-forwarded-proto\",\n \"x-real-op\",\n // readonly headers\n \"content-length\",\n \"transfer-encoding\",\n \"via\"\n]);\n\nconst blacklistedHeadersRegex = [/^x-amz-cf-/, /^x-edge-/];\n\n/**\n * Some headers cannot be modified with lambda edge.\n * Source: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html\n */\nexport function isHeaderBlacklisted(header: string) {\n header = header.toLocaleLowerCase();\n return blacklistedHeaders.has(header) || blacklistedHeadersRegex.some(r => r.test(header));\n}\n"],"mappings":"AAAA,MAAMA,kBAAkB,GAAG,IAAIC,GAAG,CAAC;AAC/B;AACA,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,WAAW;AACX;AACA,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,CACR,CAAC;AAEF,MAAMC,uBAAuB,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;;AAE1D;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CAACC,MAAc,EAAE;EAChDA,MAAM,GAAGA,MAAM,CAACC,iBAAiB,CAAC,CAAC;EACnC,OAAOL,kBAAkB,CAACM,GAAG,CAACF,MAAM,CAAC,IAAIF,uBAAuB,CAACK,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,CAACL,MAAM,CAAC,CAAC;AAC9F","ignoreList":[]}
1
+ {"version":3,"file":"stagedRollouts/utils/headerBlacklist.js","sources":["../../../src/stagedRollouts/utils/headerBlacklist.ts"],"sourcesContent":["const blacklistedHeaders = new Set([\n // blacklisted headers\n \"connection\",\n \"expect\",\n \"keep-Alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"proxy-connection\",\n \"trailer\",\n \"upgrade\",\n \"x-accel-buffering\",\n \"x-accel-charset\",\n \"x-accel-limit-rate\",\n \"x-accel-redirect\",\n \"x-cache\",\n \"x-forwarded-proto\",\n \"x-real-op\",\n // readonly headers\n \"content-length\",\n \"transfer-encoding\",\n \"via\"\n]);\n\nconst blacklistedHeadersRegex = [/^x-amz-cf-/, /^x-edge-/];\n\n/**\n * Some headers cannot be modified with lambda edge.\n * Source: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html\n */\nexport function isHeaderBlacklisted(header: string) {\n header = header.toLocaleLowerCase();\n return blacklistedHeaders.has(header) || blacklistedHeadersRegex.some(r => r.test(header));\n}\n"],"names":["blacklistedHeaders","Set","blacklistedHeadersRegex","isHeaderBlacklisted","header","r"],"mappings":"AAAA,MAAMA,qBAAqB,IAAIC,IAAI;IAE/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;CACH;AAED,MAAMC,0BAA0B;IAAC;IAAc;CAAW;AAMnD,SAASC,oBAAoBC,MAAc;IAC9CA,SAASA,OAAO,iBAAiB;IACjC,OAAOJ,mBAAmB,GAAG,CAACI,WAAWF,wBAAwB,IAAI,CAACG,CAAAA,IAAKA,EAAE,IAAI,CAACD;AACtF"}
@@ -3,103 +3,82 @@ import { load } from "cheerio";
3
3
  import { parseSrcset, stringifySrcset } from "srcset";
4
4
  import { isHeaderBlacklisted } from "./headerBlacklist.js";
5
5
  import { logDebug } from "./log.js";
6
-
7
- // TODO cheerio does not have Element type, so we define it here
8
-
9
- /**
10
- * Load HTML from origin and perform transformation of URLs to absolute
11
- * @param domain Domain of the origin cloudfront
12
- * @param path Path of the file we want to retrieve
13
- * @returns Response object
14
- */
15
- export function loadOriginPage(domain, path) {
16
- return new Promise((resolve, reject) => {
17
- logDebug(`Pulling page from ${domain}${path}`);
18
- let responseBody = "";
19
- const req = get({
20
- hostname: domain,
21
- port: 443,
22
- path: path
23
- }, res => {
24
- res.on("data", chunk => responseBody += chunk);
25
- res.on("end", () => {
26
- logDebug(`Parsing page`);
27
- const html = parseHtml(responseBody, domain);
28
- const response = {
29
- body: html,
30
- status: "200",
31
- statusDescription: "ok",
32
- headers: {}
33
- };
34
-
35
- // Rewrite headers from the HTTP response
36
- for (const header of Object.keys(res.headers)) {
37
- // We cannot set any header we want.
38
- // CloudFront is restricting us from setting or changing some headers.
39
- if (isHeaderBlacklisted(header)) {
40
- continue;
41
- }
42
- const value = res.headers[header];
43
- if (Array.isArray(value)) {
44
- response.headers[header] = value.map(h => ({
45
- key: header,
46
- value: h
47
- }));
48
- } else if (value) {
49
- response.headers[header] = [{
50
- key: header,
51
- value: value
52
- }];
53
- }
54
- }
55
- logDebug(`Page parsed`);
56
- resolve(response);
57
- });
58
- });
59
- req.on("error", e => {
60
- reject({
61
- statusCode: 500,
62
- body: e.message
63
- });
6
+ function loadOriginPage(domain, path) {
7
+ return new Promise((resolve, reject)=>{
8
+ logDebug(`Pulling page from ${domain}${path}`);
9
+ let responseBody = "";
10
+ const req = get({
11
+ hostname: domain,
12
+ port: 443,
13
+ path: path
14
+ }, (res)=>{
15
+ res.on("data", (chunk)=>responseBody += chunk);
16
+ res.on("end", ()=>{
17
+ logDebug("Parsing page");
18
+ const html = parseHtml(responseBody, domain);
19
+ const response = {
20
+ body: html,
21
+ status: "200",
22
+ statusDescription: "ok",
23
+ headers: {}
24
+ };
25
+ for (const header of Object.keys(res.headers)){
26
+ if (isHeaderBlacklisted(header)) continue;
27
+ const value = res.headers[header];
28
+ if (Array.isArray(value)) response.headers[header] = value.map((h)=>({
29
+ key: header,
30
+ value: h
31
+ }));
32
+ else if (value) response.headers[header] = [
33
+ {
34
+ key: header,
35
+ value: value
36
+ }
37
+ ];
38
+ }
39
+ logDebug("Page parsed");
40
+ resolve(response);
41
+ });
42
+ });
43
+ req.on("error", (e)=>{
44
+ reject({
45
+ statusCode: 500,
46
+ body: e.message
47
+ });
48
+ });
64
49
  });
65
- });
66
50
  }
67
51
  function parseHtml(html, domain) {
68
- const doc = load(html);
69
- const host = `https://${domain}`;
70
- doc("head > link").each((_i, el) => {
71
- prefixUrl(el, "href", host);
72
- });
73
- doc("script").each((_i, el) => {
74
- prefixUrl(el, "src", host);
75
- });
76
- doc("body").find("img").each((_i, el) => {
77
- prefixUrl(el, "src", host);
78
-
79
- // Handle also srcset property for responsive images.
80
- const srcset = el.attribs["srcset"];
81
- if (srcset) {
82
- const srcsetParsed = parseSrcset(srcset);
83
- const srcsetRebased = srcsetParsed.map(src => {
84
- if (src.url.startsWith("/")) {
85
- return {
86
- url: host + src.url,
87
- density: src.density,
88
- width: src.width
89
- };
52
+ const doc = load(html);
53
+ const host = `https://${domain}`;
54
+ doc("head > link").each((_i, el)=>{
55
+ prefixUrl(el, "href", host);
56
+ });
57
+ doc("script").each((_i, el)=>{
58
+ prefixUrl(el, "src", host);
59
+ });
60
+ doc("body").find("img").each((_i, el)=>{
61
+ prefixUrl(el, "src", host);
62
+ const srcset = el.attribs["srcset"];
63
+ if (srcset) {
64
+ const srcsetParsed = parseSrcset(srcset);
65
+ const srcsetRebased = srcsetParsed.map((src)=>{
66
+ if (src.url.startsWith("/")) return {
67
+ url: host + src.url,
68
+ density: src.density,
69
+ width: src.width
70
+ };
71
+ return src;
72
+ });
73
+ el.attribs["srcset"] = stringifySrcset(srcsetRebased);
90
74
  }
91
- return src;
92
- });
93
- el.attribs["srcset"] = stringifySrcset(srcsetRebased);
94
- }
95
- });
96
- return doc.html();
75
+ });
76
+ return doc.html();
97
77
  }
98
78
  function prefixUrl(el, attr, host) {
99
- const href = el.attribs[attr];
100
- if (href && href.startsWith("/")) {
101
- el.attribs[attr] = host + href;
102
- }
79
+ const href = el.attribs[attr];
80
+ if (href && href.startsWith("/")) el.attribs[attr] = host + href;
103
81
  }
82
+ export { loadOriginPage };
104
83
 
105
84
  //# sourceMappingURL=loadOriginPage.js.map