@webiny/pulumi-aws 5.34.6-beta.0 → 5.34.6-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.
@@ -1,5 +1,6 @@
1
1
  import * as aws from "@pulumi/aws";
2
2
  import { CreateApiPulumiAppParams as BaseCreateApiPulumiAppParams } from "../apps/api/createApiPulumiApp";
3
+ import { PulumiAppParam } from "@webiny/pulumi";
3
4
  export declare type ApiPulumiApp = ReturnType<typeof createApiPulumiApp>;
4
5
  export declare type ApiPulumiAppAdvancedVpcParams = Partial<{
5
6
  useExistingVpc: {
@@ -7,7 +8,7 @@ export declare type ApiPulumiAppAdvancedVpcParams = Partial<{
7
8
  };
8
9
  }>;
9
10
  export interface CreateApiPulumiAppParams extends Omit<BaseCreateApiPulumiAppParams, "vpc"> {
10
- vpc?: boolean | ApiPulumiAppAdvancedVpcParams;
11
+ vpc?: PulumiAppParam<boolean | ApiPulumiAppAdvancedVpcParams>;
11
12
  }
12
13
  export declare function createApiPulumiApp(projectAppParams?: CreateApiPulumiAppParams): import("@webiny/pulumi").PulumiApp<{
13
14
  fileManager: {
@@ -18,19 +18,29 @@ var _createApiPulumiApp = require("../apps/api/createApiPulumiApp");
18
18
  var _pulumi = require("@webiny/pulumi");
19
19
 
20
20
  function createApiPulumiApp(projectAppParams = {}) {
21
- const {
22
- vpc,
23
- pulumi
24
- } = projectAppParams;
25
- const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
26
21
  return (0, _createApiPulumiApp.createApiPulumiApp)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, projectAppParams), {}, {
27
22
  // If using existing VPC, we ensure `vpc` param is set to `false`.
28
- vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),
23
+ vpc: ({
24
+ getParam
25
+ }) => {
26
+ const vpc = getParam(projectAppParams.vpc);
27
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
28
+ return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);
29
+ },
29
30
 
30
31
  pulumi(...args) {
31
- // Not using advanced VPC params? Then immediately exit.
32
+ var _projectAppParams$pul2;
33
+
34
+ const [{
35
+ getParam
36
+ }] = args;
37
+ const vpc = getParam(projectAppParams.vpc);
38
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean"; // Not using advanced VPC params? Then immediately exit.
39
+
32
40
  if (!usingAdvancedVpcParams) {
33
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
41
+ var _projectAppParams$pul;
42
+
43
+ return (_projectAppParams$pul = projectAppParams.pulumi) === null || _projectAppParams$pul === void 0 ? void 0 : _projectAppParams$pul.call(projectAppParams, ...args);
34
44
  }
35
45
 
36
46
  const [{
@@ -65,7 +75,7 @@ function createApiPulumiApp(projectAppParams = {}) {
65
75
  });
66
76
  }
67
77
 
68
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
78
+ return (_projectAppParams$pul2 = projectAppParams.pulumi) === null || _projectAppParams$pul2 === void 0 ? void 0 : _projectAppParams$pul2.call(projectAppParams, ...args);
69
79
  }
70
80
 
71
81
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["createApiPulumiApp","projectAppParams","vpc","pulumi","usingAdvancedVpcParams","baseCreateApiPulumiApp","useExistingVpc","Boolean","args","onResource","addResource","lambdaFunctionsVpcConfig","Error","resource","isResourceOfType","aws","lambda","Function","config","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole"],"sources":["createApiPulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createApiPulumiApp as baseCreateApiPulumiApp,\n CreateApiPulumiAppParams as BaseCreateApiPulumiAppParams\n} from \"~/apps/api/createApiPulumiApp\";\nimport { isResourceOfType } from \"@webiny/pulumi\";\n\nexport type ApiPulumiApp = ReturnType<typeof createApiPulumiApp>;\n\nexport type ApiPulumiAppAdvancedVpcParams = Partial<{\n useExistingVpc: {\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateApiPulumiAppParams extends Omit<BaseCreateApiPulumiAppParams, \"vpc\"> {\n vpc?: boolean | ApiPulumiAppAdvancedVpcParams;\n}\n\nexport function createApiPulumiApp(projectAppParams: CreateApiPulumiAppParams = {}) {\n const { vpc, pulumi } = projectAppParams;\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n return baseCreateApiPulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),\n pulumi(...args) {\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return pulumi?.(...args);\n }\n\n const [{ onResource, addResource }] = args;\n const { useExistingVpc } = vpc;\n\n // 1. We first deal with \"existing VPC\" setup.\n if (useExistingVpc) {\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n }\n\n return pulumi?.(...args);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAIA;;AAcO,SAASA,kBAAT,CAA4BC,gBAA0C,GAAG,EAAzE,EAA6E;EAChF,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAkBF,gBAAxB;EACA,MAAMG,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD;EAEA,OAAO,IAAAG,sCAAA,8DACAJ,gBADA;IAEH;IACAC,GAAG,EAAEE,sBAAsB,IAAIF,GAAG,CAACI,cAA9B,GAA+C,KAA/C,GAAuDC,OAAO,CAACL,GAAD,CAHhE;;IAIHC,MAAM,CAAC,GAAGK,IAAJ,EAAU;MACZ;MACA,IAAI,CAACJ,sBAAL,EAA6B;QACzB,OAAOD,MAAP,aAAOA,MAAP,uBAAOA,MAAM,CAAG,GAAGK,IAAN,CAAb;MACH;;MAED,MAAM,CAAC;QAAEC,UAAF;QAAcC;MAAd,CAAD,IAAgCF,IAAtC;MACA,MAAM;QAAEF;MAAF,IAAqBJ,GAA3B,CAPY,CASZ;;MACA,IAAII,cAAJ,EAAoB;QAChB,IAAI,CAACA,cAAc,CAACK,wBAApB,EAA8C;UAC1C,MAAM,IAAIC,KAAJ,CACF,6GADE,CAAN;QAGH;;QAEDH,UAAU,CAACI,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACC,MAAJ,CAAWC,QAAtC,CAAJ,EAAqD;YACjDJ,QAAQ,CAACK,MAAT,CAAgBC,SAAhB,CAA0Bb,cAAc,CAAEK,wBAA1C;UACH;;UAED,IAAI,IAAAG,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACK,GAAJ,CAAQC,IAAnC,CAAJ,EAA8C;YAC1C,IAAIR,QAAQ,CAACS,IAAT,CAAcC,oBAAlB,EAAwC;cACpCb,WAAW,CAACK,GAAG,CAACK,GAAJ,CAAQI,oBAAT,EAA+B;gBACtCC,IAAI,EAAG,GAAEZ,QAAQ,CAACY,IAAK,4BADe;gBAEtCP,MAAM,EAAE;kBACJQ,IAAI,EAAEb,QAAQ,CAACc,MAAT,CAAgBF,IADlB;kBAEJG,SAAS,EAAEb,GAAG,CAACK,GAAJ,CAAQS,aAAR,CAAsBC;gBAF7B;cAF8B,CAA/B,CAAX;YAOH;UACJ;QACJ,CAhBS,CAAV;MAiBH;;MAED,OAAO3B,MAAP,aAAOA,MAAP,uBAAOA,MAAM,CAAG,GAAGK,IAAN,CAAb;IACH;;EAzCE,GAAP;AA2CH"}
1
+ {"version":3,"names":["createApiPulumiApp","projectAppParams","baseCreateApiPulumiApp","vpc","getParam","usingAdvancedVpcParams","useExistingVpc","Boolean","pulumi","args","onResource","addResource","lambdaFunctionsVpcConfig","Error","resource","isResourceOfType","aws","lambda","Function","config","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole"],"sources":["createApiPulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createApiPulumiApp as baseCreateApiPulumiApp,\n CreateApiPulumiAppParams as BaseCreateApiPulumiAppParams\n} from \"~/apps/api/createApiPulumiApp\";\nimport { isResourceOfType, PulumiAppParam } from \"@webiny/pulumi\";\n\nexport type ApiPulumiApp = ReturnType<typeof createApiPulumiApp>;\n\nexport type ApiPulumiAppAdvancedVpcParams = Partial<{\n useExistingVpc: {\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateApiPulumiAppParams extends Omit<BaseCreateApiPulumiAppParams, \"vpc\"> {\n vpc?: PulumiAppParam<boolean | ApiPulumiAppAdvancedVpcParams>;\n}\n\nexport function createApiPulumiApp(projectAppParams: CreateApiPulumiAppParams = {}) {\n return baseCreateApiPulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: ({ getParam }) => {\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);\n },\n pulumi(...args) {\n const [{ getParam }] = args;\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return projectAppParams.pulumi?.(...args);\n }\n\n const [{ onResource, addResource }] = args;\n const { useExistingVpc } = vpc;\n\n // 1. We first deal with \"existing VPC\" setup.\n if (useExistingVpc) {\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n }\n\n return projectAppParams.pulumi?.(...args);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAIA;;AAcO,SAASA,kBAAT,CAA4BC,gBAA0C,GAAG,EAAzE,EAA6E;EAChF,OAAO,IAAAC,sCAAA,8DACAD,gBADA;IAEH;IACAE,GAAG,EAAE,CAAC;MAAEC;IAAF,CAAD,KAAkB;MACnB,MAAMD,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD;MACA,OAAOE,sBAAsB,IAAIF,GAAG,CAACG,cAA9B,GAA+C,KAA/C,GAAuDC,OAAO,CAACJ,GAAD,CAArE;IACH,CAPE;;IAQHK,MAAM,CAAC,GAAGC,IAAJ,EAAU;MAAA;;MACZ,MAAM,CAAC;QAAEL;MAAF,CAAD,IAAiBK,IAAvB;MACA,MAAMN,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD,CAHY,CAKZ;;MACA,IAAI,CAACE,sBAAL,EAA6B;QAAA;;QACzB,gCAAOJ,gBAAgB,CAACO,MAAxB,0DAAO,2BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;MACH;;MAED,MAAM,CAAC;QAAEC,UAAF;QAAcC;MAAd,CAAD,IAAgCF,IAAtC;MACA,MAAM;QAAEH;MAAF,IAAqBH,GAA3B,CAXY,CAaZ;;MACA,IAAIG,cAAJ,EAAoB;QAChB,IAAI,CAACA,cAAc,CAACM,wBAApB,EAA8C;UAC1C,MAAM,IAAIC,KAAJ,CACF,6GADE,CAAN;QAGH;;QAEDH,UAAU,CAACI,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACC,MAAJ,CAAWC,QAAtC,CAAJ,EAAqD;YACjDJ,QAAQ,CAACK,MAAT,CAAgBC,SAAhB,CAA0Bd,cAAc,CAAEM,wBAA1C;UACH;;UAED,IAAI,IAAAG,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACK,GAAJ,CAAQC,IAAnC,CAAJ,EAA8C;YAC1C,IAAIR,QAAQ,CAACS,IAAT,CAAcC,oBAAlB,EAAwC;cACpCb,WAAW,CAACK,GAAG,CAACK,GAAJ,CAAQI,oBAAT,EAA+B;gBACtCC,IAAI,EAAG,GAAEZ,QAAQ,CAACY,IAAK,4BADe;gBAEtCP,MAAM,EAAE;kBACJQ,IAAI,EAAEb,QAAQ,CAACc,MAAT,CAAgBF,IADlB;kBAEJG,SAAS,EAAEb,GAAG,CAACK,GAAJ,CAAQS,aAAR,CAAsBC;gBAF7B;cAF8B,CAA/B,CAAX;YAOH;UACJ;QACJ,CAhBS,CAAV;MAiBH;;MAED,iCAAO9B,gBAAgB,CAACO,MAAxB,2DAAO,4BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;IACH;;EAjDE,GAAP;AAmDH"}
@@ -1,5 +1,6 @@
1
1
  import * as aws from "@pulumi/aws";
2
2
  import { CreateCorePulumiAppParams as BaseCreateCorePulumiAppParams } from "../apps/core/createCorePulumiApp";
3
+ import { PulumiAppParam } from "@webiny/pulumi";
3
4
  export declare type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;
4
5
  export declare type CorePulumiAppAdvancedVpcParams = Partial<{
5
6
  useVpcEndpoints: boolean;
@@ -9,7 +10,7 @@ export declare type CorePulumiAppAdvancedVpcParams = Partial<{
9
10
  };
10
11
  }>;
11
12
  export interface CreateCorePulumiAppParams extends Omit<BaseCreateCorePulumiAppParams, "vpc"> {
12
- vpc?: boolean | CorePulumiAppAdvancedVpcParams;
13
+ vpc?: PulumiAppParam<boolean | CorePulumiAppAdvancedVpcParams>;
13
14
  }
14
15
  export declare function createCorePulumiApp(projectAppParams?: CreateCorePulumiAppParams): import("@webiny/pulumi").PulumiApp<{
15
16
  fileManagerBucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucket").Bucket>;
@@ -18,20 +18,29 @@ var _createCorePulumiApp = require("../apps/core/createCorePulumiApp");
18
18
  var _pulumi = require("@webiny/pulumi");
19
19
 
20
20
  function createCorePulumiApp(projectAppParams = {}) {
21
- const {
22
- vpc,
23
- elasticSearch,
24
- pulumi
25
- } = projectAppParams;
26
- const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
27
21
  return (0, _createCorePulumiApp.createCorePulumiApp)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, projectAppParams), {}, {
28
22
  // If using existing VPC, we ensure `vpc` param is set to `false`.
29
- vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),
23
+ vpc: ({
24
+ getParam
25
+ }) => {
26
+ const vpc = getParam(projectAppParams.vpc);
27
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
28
+ return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);
29
+ },
30
30
 
31
31
  pulumi(...args) {
32
- // Not using advanced VPC params? Then immediately exit.
32
+ var _projectAppParams$pul3;
33
+
34
+ const [{
35
+ getParam
36
+ }] = args;
37
+ const vpc = getParam(projectAppParams.vpc);
38
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean"; // Not using advanced VPC params? Then immediately exit.
39
+
33
40
  if (!usingAdvancedVpcParams) {
34
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
41
+ var _projectAppParams$pul;
42
+
43
+ return (_projectAppParams$pul = projectAppParams.pulumi) === null || _projectAppParams$pul === void 0 ? void 0 : _projectAppParams$pul.call(projectAppParams, ...args);
35
44
  }
36
45
 
37
46
  const [{
@@ -45,11 +54,13 @@ function createCorePulumiApp(projectAppParams = {}) {
45
54
  } = vpc; // 1. We first deal with "existing VPC" setup.
46
55
 
47
56
  if (useExistingVpc) {
57
+ var _projectAppParams$pul2;
58
+
48
59
  if ("useVpcEndpoints" in vpc) {
49
60
  throw new Error("Cannot specify `useVpcEndpoints` parameter when using an existing VPC. The VPC endpoints configurations should be already defined within the existing VPC.");
50
61
  }
51
62
 
52
- if (elasticSearch) {
63
+ if (projectAppParams.elasticSearch) {
53
64
  if (!useExistingVpc.elasticSearchDomainVpcConfig) {
54
65
  throw new Error("Cannot specify `useExistingVpc` parameter because the `elasticSearchDomainVpcConfig` parameter wasn't provided.");
55
66
  }
@@ -82,7 +93,7 @@ function createCorePulumiApp(projectAppParams = {}) {
82
93
  }
83
94
  }
84
95
  });
85
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
96
+ return (_projectAppParams$pul2 = projectAppParams.pulumi) === null || _projectAppParams$pul2 === void 0 ? void 0 : _projectAppParams$pul2.call(projectAppParams, ...args);
86
97
  } // 2. Now we deal with "non-existing VPC" setup.
87
98
 
88
99
 
@@ -138,7 +149,7 @@ function createCorePulumiApp(projectAppParams = {}) {
138
149
  });
139
150
  }
140
151
 
141
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
152
+ return (_projectAppParams$pul3 = projectAppParams.pulumi) === null || _projectAppParams$pul3 === void 0 ? void 0 : _projectAppParams$pul3.call(projectAppParams, ...args);
142
153
  }
143
154
 
144
155
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["createCorePulumiApp","projectAppParams","vpc","elasticSearch","pulumi","usingAdvancedVpcParams","baseCreateCorePulumiApp","useExistingVpc","Boolean","args","resources","addResource","onResource","useVpcEndpoints","Error","elasticSearchDomainVpcConfig","resource","isResourceOfType","aws","elasticsearch","Domain","config","vpcOptions","lambdaFunctionsVpcConfig","lambda","Function","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","ec2","Vpc","enableDnsSupport","enableDnsHostnames","subnets","routeTables","VpcEndpoint","vpcId","id","serviceName","routeTableIds","privateSubnets","vpcEndpointType","privateDnsEnabled","securityGroupIds","defaultSecurityGroupId","subnetIds","private","map","subNet"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createCorePulumiApp as baseCreateCorePulumiApp,\n CreateCorePulumiAppParams as BaseCreateCorePulumiAppParams\n} from \"~/apps/core/createCorePulumiApp\";\nimport { isResourceOfType } from \"@webiny/pulumi\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport type CorePulumiAppAdvancedVpcParams = Partial<{\n useVpcEndpoints: boolean;\n useExistingVpc: {\n elasticSearchDomainVpcConfig?: aws.types.input.elasticsearch.DomainVpcOptions;\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateCorePulumiAppParams extends Omit<BaseCreateCorePulumiAppParams, \"vpc\"> {\n vpc?: boolean | CorePulumiAppAdvancedVpcParams;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n const { vpc, elasticSearch, pulumi } = projectAppParams;\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n return baseCreateCorePulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),\n pulumi(...args) {\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return pulumi?.(...args);\n }\n\n const [{ resources, addResource, onResource }] = args;\n const { useExistingVpc, useVpcEndpoints } = vpc;\n\n // 1. We first deal with \"existing VPC\" setup.\n if (useExistingVpc) {\n if (\"useVpcEndpoints\" in vpc) {\n throw new Error(\n \"Cannot specify `useVpcEndpoints` parameter when using an existing VPC. The VPC endpoints configurations should be already defined within the existing VPC.\"\n );\n }\n\n if (elasticSearch) {\n if (!useExistingVpc.elasticSearchDomainVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `elasticSearchDomainVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.elasticsearch.Domain)) {\n resource.config.vpcOptions(\n useExistingVpc!.elasticSearchDomainVpcConfig\n );\n }\n });\n }\n\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n\n return pulumi?.(...args);\n }\n\n // 2. Now we deal with \"non-existing VPC\" setup.\n if (useVpcEndpoints) {\n onResource(resource => {\n if (isResourceOfType(resource, aws.ec2.Vpc)) {\n resource.config.enableDnsSupport(true);\n resource.config.enableDnsHostnames(true);\n }\n });\n\n const { vpc, subnets, routeTables } = resources.vpc!;\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-s3-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.s3\",\n routeTableIds: [routeTables.privateSubnets.output.id]\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-dynamodb-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.dynamodb\",\n routeTableIds: [routeTables.privateSubnets.output.id]\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-sqs-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.sqs\",\n vpcEndpointType: \"Interface\",\n privateDnsEnabled: true,\n securityGroupIds: [vpc.output.defaultSecurityGroupId],\n subnetIds: subnets.private.map(subNet => subNet.output.id)\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-events-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.events\",\n vpcEndpointType: \"Interface\",\n privateDnsEnabled: true,\n securityGroupIds: [vpc.output.defaultSecurityGroupId],\n subnetIds: subnets.private.map(subNet => subNet.output.id)\n }\n });\n }\n\n return pulumi?.(...args);\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["createCorePulumiApp","projectAppParams","baseCreateCorePulumiApp","vpc","getParam","usingAdvancedVpcParams","useExistingVpc","Boolean","pulumi","args","resources","addResource","onResource","useVpcEndpoints","Error","elasticSearch","elasticSearchDomainVpcConfig","resource","isResourceOfType","aws","elasticsearch","Domain","config","vpcOptions","lambdaFunctionsVpcConfig","lambda","Function","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","ec2","Vpc","enableDnsSupport","enableDnsHostnames","subnets","routeTables","VpcEndpoint","vpcId","id","serviceName","routeTableIds","privateSubnets","vpcEndpointType","privateDnsEnabled","securityGroupIds","defaultSecurityGroupId","subnetIds","private","map","subNet"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createCorePulumiApp as baseCreateCorePulumiApp,\n CreateCorePulumiAppParams as BaseCreateCorePulumiAppParams\n} from \"~/apps/core/createCorePulumiApp\";\nimport { isResourceOfType, PulumiAppParam } from \"@webiny/pulumi\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport type CorePulumiAppAdvancedVpcParams = Partial<{\n useVpcEndpoints: boolean;\n useExistingVpc: {\n elasticSearchDomainVpcConfig?: aws.types.input.elasticsearch.DomainVpcOptions;\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateCorePulumiAppParams extends Omit<BaseCreateCorePulumiAppParams, \"vpc\"> {\n vpc?: PulumiAppParam<boolean | CorePulumiAppAdvancedVpcParams>;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n return baseCreateCorePulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: ({ getParam }) => {\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);\n },\n pulumi(...args) {\n const [{ getParam }] = args;\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return projectAppParams.pulumi?.(...args);\n }\n\n const [{ resources, addResource, onResource }] = args;\n const { useExistingVpc, useVpcEndpoints } = vpc;\n\n // 1. We first deal with \"existing VPC\" setup.\n if (useExistingVpc) {\n if (\"useVpcEndpoints\" in vpc) {\n throw new Error(\n \"Cannot specify `useVpcEndpoints` parameter when using an existing VPC. The VPC endpoints configurations should be already defined within the existing VPC.\"\n );\n }\n\n if (projectAppParams.elasticSearch) {\n if (!useExistingVpc.elasticSearchDomainVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `elasticSearchDomainVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.elasticsearch.Domain)) {\n resource.config.vpcOptions(\n useExistingVpc!.elasticSearchDomainVpcConfig\n );\n }\n });\n }\n\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n\n return projectAppParams.pulumi?.(...args);\n }\n\n // 2. Now we deal with \"non-existing VPC\" setup.\n if (useVpcEndpoints) {\n onResource(resource => {\n if (isResourceOfType(resource, aws.ec2.Vpc)) {\n resource.config.enableDnsSupport(true);\n resource.config.enableDnsHostnames(true);\n }\n });\n\n const { vpc, subnets, routeTables } = resources.vpc!;\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-s3-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.s3\",\n routeTableIds: [routeTables.privateSubnets.output.id]\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-dynamodb-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.dynamodb\",\n routeTableIds: [routeTables.privateSubnets.output.id]\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-sqs-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.sqs\",\n vpcEndpointType: \"Interface\",\n privateDnsEnabled: true,\n securityGroupIds: [vpc.output.defaultSecurityGroupId],\n subnetIds: subnets.private.map(subNet => subNet.output.id)\n }\n });\n\n addResource(aws.ec2.VpcEndpoint, {\n name: \"vpc-events-vpc-endpoint\",\n config: {\n vpcId: vpc.output.id,\n serviceName: \"com.amazonaws.eu-central-1.events\",\n vpcEndpointType: \"Interface\",\n privateDnsEnabled: true,\n securityGroupIds: [vpc.output.defaultSecurityGroupId],\n subnetIds: subnets.private.map(subNet => subNet.output.id)\n }\n });\n }\n\n return projectAppParams.pulumi?.(...args);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAIA;;AAgBO,SAASA,mBAAT,CAA6BC,gBAA2C,GAAG,EAA3E,EAA+E;EAClF,OAAO,IAAAC,wCAAA,8DACAD,gBADA;IAEH;IACAE,GAAG,EAAE,CAAC;MAAEC;IAAF,CAAD,KAAkB;MACnB,MAAMD,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD;MACA,OAAOE,sBAAsB,IAAIF,GAAG,CAACG,cAA9B,GAA+C,KAA/C,GAAuDC,OAAO,CAACJ,GAAD,CAArE;IACH,CAPE;;IAQHK,MAAM,CAAC,GAAGC,IAAJ,EAAU;MAAA;;MACZ,MAAM,CAAC;QAAEL;MAAF,CAAD,IAAiBK,IAAvB;MACA,MAAMN,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD,CAHY,CAKZ;;MACA,IAAI,CAACE,sBAAL,EAA6B;QAAA;;QACzB,gCAAOJ,gBAAgB,CAACO,MAAxB,0DAAO,2BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;MACH;;MAED,MAAM,CAAC;QAAEC,SAAF;QAAaC,WAAb;QAA0BC;MAA1B,CAAD,IAA2CH,IAAjD;MACA,MAAM;QAAEH,cAAF;QAAkBO;MAAlB,IAAsCV,GAA5C,CAXY,CAaZ;;MACA,IAAIG,cAAJ,EAAoB;QAAA;;QAChB,IAAI,qBAAqBH,GAAzB,EAA8B;UAC1B,MAAM,IAAIW,KAAJ,CACF,4JADE,CAAN;QAGH;;QAED,IAAIb,gBAAgB,CAACc,aAArB,EAAoC;UAChC,IAAI,CAACT,cAAc,CAACU,4BAApB,EAAkD;YAC9C,MAAM,IAAIF,KAAJ,CACF,iHADE,CAAN;UAGH;;UAEDF,UAAU,CAACK,QAAQ,IAAI;YACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACC,aAAJ,CAAkBC,MAA7C,CAAJ,EAA0D;cACtDJ,QAAQ,CAACK,MAAT,CAAgBC,UAAhB,CACIjB,cAAc,CAAEU,4BADpB;YAGH;UACJ,CANS,CAAV;QAOH;;QAED,IAAI,CAACV,cAAc,CAACkB,wBAApB,EAA8C;UAC1C,MAAM,IAAIV,KAAJ,CACF,6GADE,CAAN;QAGH;;QAEDF,UAAU,CAACK,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACM,MAAJ,CAAWC,QAAtC,CAAJ,EAAqD;YACjDT,QAAQ,CAACK,MAAT,CAAgBK,SAAhB,CAA0BrB,cAAc,CAAEkB,wBAA1C;UACH;;UAED,IAAI,IAAAN,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACS,GAAJ,CAAQC,IAAnC,CAAJ,EAA8C;YAC1C,IAAIZ,QAAQ,CAACa,IAAT,CAAcC,oBAAlB,EAAwC;cACpCpB,WAAW,CAACQ,GAAG,CAACS,GAAJ,CAAQI,oBAAT,EAA+B;gBACtCC,IAAI,EAAG,GAAEhB,QAAQ,CAACgB,IAAK,4BADe;gBAEtCX,MAAM,EAAE;kBACJY,IAAI,EAAEjB,QAAQ,CAACkB,MAAT,CAAgBF,IADlB;kBAEJG,SAAS,EAAEjB,GAAG,CAACS,GAAJ,CAAQS,aAAR,CAAsBC;gBAF7B;cAF8B,CAA/B,CAAX;YAOH;UACJ;QACJ,CAhBS,CAAV;QAkBA,iCAAOrC,gBAAgB,CAACO,MAAxB,2DAAO,4BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;MACH,CA9DW,CAgEZ;;;MACA,IAAII,eAAJ,EAAqB;QACjBD,UAAU,CAACK,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACoB,GAAJ,CAAQC,GAAnC,CAAJ,EAA6C;YACzCvB,QAAQ,CAACK,MAAT,CAAgBmB,gBAAhB,CAAiC,IAAjC;YACAxB,QAAQ,CAACK,MAAT,CAAgBoB,kBAAhB,CAAmC,IAAnC;UACH;QACJ,CALS,CAAV;QAOA,MAAM;UAAEvC,GAAF;UAAOwC,OAAP;UAAgBC;QAAhB,IAAgClC,SAAS,CAACP,GAAhD;QACAQ,WAAW,CAACQ,GAAG,CAACoB,GAAJ,CAAQM,WAAT,EAAsB;UAC7BZ,IAAI,EAAE,qBADuB;UAE7BX,MAAM,EAAE;YACJwB,KAAK,EAAE3C,GAAG,CAACgC,MAAJ,CAAWY,EADd;YAEJC,WAAW,EAAE,+BAFT;YAGJC,aAAa,EAAE,CAACL,WAAW,CAACM,cAAZ,CAA2Bf,MAA3B,CAAkCY,EAAnC;UAHX;QAFqB,CAAtB,CAAX;QASApC,WAAW,CAACQ,GAAG,CAACoB,GAAJ,CAAQM,WAAT,EAAsB;UAC7BZ,IAAI,EAAE,2BADuB;UAE7BX,MAAM,EAAE;YACJwB,KAAK,EAAE3C,GAAG,CAACgC,MAAJ,CAAWY,EADd;YAEJC,WAAW,EAAE,qCAFT;YAGJC,aAAa,EAAE,CAACL,WAAW,CAACM,cAAZ,CAA2Bf,MAA3B,CAAkCY,EAAnC;UAHX;QAFqB,CAAtB,CAAX;QASApC,WAAW,CAACQ,GAAG,CAACoB,GAAJ,CAAQM,WAAT,EAAsB;UAC7BZ,IAAI,EAAE,sBADuB;UAE7BX,MAAM,EAAE;YACJwB,KAAK,EAAE3C,GAAG,CAACgC,MAAJ,CAAWY,EADd;YAEJC,WAAW,EAAE,gCAFT;YAGJG,eAAe,EAAE,WAHb;YAIJC,iBAAiB,EAAE,IAJf;YAKJC,gBAAgB,EAAE,CAAClD,GAAG,CAACgC,MAAJ,CAAWmB,sBAAZ,CALd;YAMJC,SAAS,EAAEZ,OAAO,CAACa,OAAR,CAAgBC,GAAhB,CAAoBC,MAAM,IAAIA,MAAM,CAACvB,MAAP,CAAcY,EAA5C;UANP;QAFqB,CAAtB,CAAX;QAYApC,WAAW,CAACQ,GAAG,CAACoB,GAAJ,CAAQM,WAAT,EAAsB;UAC7BZ,IAAI,EAAE,yBADuB;UAE7BX,MAAM,EAAE;YACJwB,KAAK,EAAE3C,GAAG,CAACgC,MAAJ,CAAWY,EADd;YAEJC,WAAW,EAAE,mCAFT;YAGJG,eAAe,EAAE,WAHb;YAIJC,iBAAiB,EAAE,IAJf;YAKJC,gBAAgB,EAAE,CAAClD,GAAG,CAACgC,MAAJ,CAAWmB,sBAAZ,CALd;YAMJC,SAAS,EAAEZ,OAAO,CAACa,OAAR,CAAgBC,GAAhB,CAAoBC,MAAM,IAAIA,MAAM,CAACvB,MAAP,CAAcY,EAA5C;UANP;QAFqB,CAAtB,CAAX;MAWH;;MAED,iCAAO9C,gBAAgB,CAACO,MAAxB,2DAAO,4BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;IACH;;EA9HE,GAAP;AAgIH"}
@@ -1,5 +1,6 @@
1
1
  import * as aws from "@pulumi/aws";
2
2
  import { CreateWebsitePulumiAppParams as BaseCreateWebsitePulumiAppParams } from "../apps/website/createWebsitePulumiApp";
3
+ import { PulumiAppParam } from "@webiny/pulumi";
3
4
  export declare type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;
4
5
  export declare type WebsitePulumiAppAdvancedVpcParams = Partial<{
5
6
  useExistingVpc: {
@@ -7,7 +8,7 @@ export declare type WebsitePulumiAppAdvancedVpcParams = Partial<{
7
8
  };
8
9
  }>;
9
10
  export interface CreateWebsitePulumiAppParams extends Omit<BaseCreateWebsitePulumiAppParams, "vpc"> {
10
- vpc?: boolean | WebsitePulumiAppAdvancedVpcParams;
11
+ vpc?: PulumiAppParam<boolean | WebsitePulumiAppAdvancedVpcParams>;
11
12
  }
12
13
  export declare function createWebsitePulumiApp(projectAppParams?: CreateWebsitePulumiAppParams): import("@webiny/pulumi").PulumiApp<{
13
14
  prerendering: {
@@ -18,19 +18,29 @@ var _createWebsitePulumiApp = require("../apps/website/createWebsitePulumiApp");
18
18
  var _pulumi = require("@webiny/pulumi");
19
19
 
20
20
  function createWebsitePulumiApp(projectAppParams = {}) {
21
- const {
22
- vpc,
23
- pulumi
24
- } = projectAppParams;
25
- const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
26
21
  return (0, _createWebsitePulumiApp.createWebsitePulumiApp)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, projectAppParams), {}, {
27
22
  // If using existing VPC, we ensure `vpc` param is set to `false`.
28
- vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),
23
+ vpc: ({
24
+ getParam
25
+ }) => {
26
+ const vpc = getParam(projectAppParams.vpc);
27
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean";
28
+ return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);
29
+ },
29
30
 
30
31
  pulumi(...args) {
31
- // Not using advanced VPC params? Then immediately exit.
32
+ var _projectAppParams$pul2;
33
+
34
+ const [{
35
+ getParam
36
+ }] = args;
37
+ const vpc = getParam(projectAppParams.vpc);
38
+ const usingAdvancedVpcParams = vpc && typeof vpc !== "boolean"; // Not using advanced VPC params? Then immediately exit.
39
+
32
40
  if (!usingAdvancedVpcParams) {
33
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
41
+ var _projectAppParams$pul;
42
+
43
+ return (_projectAppParams$pul = projectAppParams.pulumi) === null || _projectAppParams$pul === void 0 ? void 0 : _projectAppParams$pul.call(projectAppParams, ...args);
34
44
  }
35
45
 
36
46
  const [{
@@ -39,7 +49,7 @@ function createWebsitePulumiApp(projectAppParams = {}) {
39
49
  }] = args;
40
50
  const {
41
51
  useExistingVpc
42
- } = vpc; // 1. We first deal with "existing VPC" setup.
52
+ } = vpc;
43
53
 
44
54
  if (useExistingVpc) {
45
55
  if (!useExistingVpc.lambdaFunctionsVpcConfig) {
@@ -65,7 +75,7 @@ function createWebsitePulumiApp(projectAppParams = {}) {
65
75
  });
66
76
  }
67
77
 
68
- return pulumi === null || pulumi === void 0 ? void 0 : pulumi(...args);
78
+ return (_projectAppParams$pul2 = projectAppParams.pulumi) === null || _projectAppParams$pul2 === void 0 ? void 0 : _projectAppParams$pul2.call(projectAppParams, ...args);
69
79
  }
70
80
 
71
81
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["createWebsitePulumiApp","projectAppParams","vpc","pulumi","usingAdvancedVpcParams","baseCreateWebsitePulumiApp","useExistingVpc","Boolean","args","onResource","addResource","lambdaFunctionsVpcConfig","Error","resource","isResourceOfType","aws","lambda","Function","config","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole"],"sources":["createWebsitePulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createWebsitePulumiApp as baseCreateWebsitePulumiApp,\n CreateWebsitePulumiAppParams as BaseCreateWebsitePulumiAppParams\n} from \"~/apps/website/createWebsitePulumiApp\";\nimport { isResourceOfType } from \"@webiny/pulumi\";\n\nexport type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;\n\nexport type WebsitePulumiAppAdvancedVpcParams = Partial<{\n useExistingVpc: {\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateWebsitePulumiAppParams\n extends Omit<BaseCreateWebsitePulumiAppParams, \"vpc\"> {\n vpc?: boolean | WebsitePulumiAppAdvancedVpcParams;\n}\n\nexport function createWebsitePulumiApp(projectAppParams: CreateWebsitePulumiAppParams = {}) {\n const { vpc, pulumi } = projectAppParams;\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n return baseCreateWebsitePulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc),\n pulumi(...args) {\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return pulumi?.(...args);\n }\n\n const [{ onResource, addResource }] = args;\n const { useExistingVpc } = vpc;\n\n // 1. We first deal with \"existing VPC\" setup.\n if (useExistingVpc) {\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n }\n\n return pulumi?.(...args);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAIA;;AAeO,SAASA,sBAAT,CAAgCC,gBAA8C,GAAG,EAAjF,EAAqF;EACxF,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAkBF,gBAAxB;EACA,MAAMG,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD;EAEA,OAAO,IAAAG,8CAAA,8DACAJ,gBADA;IAEH;IACAC,GAAG,EAAEE,sBAAsB,IAAIF,GAAG,CAACI,cAA9B,GAA+C,KAA/C,GAAuDC,OAAO,CAACL,GAAD,CAHhE;;IAIHC,MAAM,CAAC,GAAGK,IAAJ,EAAU;MACZ;MACA,IAAI,CAACJ,sBAAL,EAA6B;QACzB,OAAOD,MAAP,aAAOA,MAAP,uBAAOA,MAAM,CAAG,GAAGK,IAAN,CAAb;MACH;;MAED,MAAM,CAAC;QAAEC,UAAF;QAAcC;MAAd,CAAD,IAAgCF,IAAtC;MACA,MAAM;QAAEF;MAAF,IAAqBJ,GAA3B,CAPY,CASZ;;MACA,IAAII,cAAJ,EAAoB;QAChB,IAAI,CAACA,cAAc,CAACK,wBAApB,EAA8C;UAC1C,MAAM,IAAIC,KAAJ,CACF,6GADE,CAAN;QAGH;;QAEDH,UAAU,CAACI,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACC,MAAJ,CAAWC,QAAtC,CAAJ,EAAqD;YACjDJ,QAAQ,CAACK,MAAT,CAAgBC,SAAhB,CAA0Bb,cAAc,CAAEK,wBAA1C;UACH;;UAED,IAAI,IAAAG,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACK,GAAJ,CAAQC,IAAnC,CAAJ,EAA8C;YAC1C,IAAIR,QAAQ,CAACS,IAAT,CAAcC,oBAAlB,EAAwC;cACpCb,WAAW,CAACK,GAAG,CAACK,GAAJ,CAAQI,oBAAT,EAA+B;gBACtCC,IAAI,EAAG,GAAEZ,QAAQ,CAACY,IAAK,4BADe;gBAEtCP,MAAM,EAAE;kBACJQ,IAAI,EAAEb,QAAQ,CAACc,MAAT,CAAgBF,IADlB;kBAEJG,SAAS,EAAEb,GAAG,CAACK,GAAJ,CAAQS,aAAR,CAAsBC;gBAF7B;cAF8B,CAA/B,CAAX;YAOH;UACJ;QACJ,CAhBS,CAAV;MAiBH;;MAED,OAAO3B,MAAP,aAAOA,MAAP,uBAAOA,MAAM,CAAG,GAAGK,IAAN,CAAb;IACH;;EAzCE,GAAP;AA2CH"}
1
+ {"version":3,"names":["createWebsitePulumiApp","projectAppParams","baseCreateWebsitePulumiApp","vpc","getParam","usingAdvancedVpcParams","useExistingVpc","Boolean","pulumi","args","onResource","addResource","lambdaFunctionsVpcConfig","Error","resource","isResourceOfType","aws","lambda","Function","config","vpcConfig","iam","Role","meta","isLambdaFunctionRole","RolePolicyAttachment","name","role","output","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole"],"sources":["createWebsitePulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport {\n createWebsitePulumiApp as baseCreateWebsitePulumiApp,\n CreateWebsitePulumiAppParams as BaseCreateWebsitePulumiAppParams\n} from \"~/apps/website/createWebsitePulumiApp\";\nimport { isResourceOfType, PulumiAppParam } from \"@webiny/pulumi\";\n\nexport type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;\n\nexport type WebsitePulumiAppAdvancedVpcParams = Partial<{\n useExistingVpc: {\n lambdaFunctionsVpcConfig: aws.types.input.lambda.FunctionVpcConfig;\n };\n}>;\n\nexport interface CreateWebsitePulumiAppParams\n extends Omit<BaseCreateWebsitePulumiAppParams, \"vpc\"> {\n vpc?: PulumiAppParam<boolean | WebsitePulumiAppAdvancedVpcParams>;\n}\n\nexport function createWebsitePulumiApp(projectAppParams: CreateWebsitePulumiAppParams = {}) {\n return baseCreateWebsitePulumiApp({\n ...projectAppParams,\n // If using existing VPC, we ensure `vpc` param is set to `false`.\n vpc: ({ getParam }) => {\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n return usingAdvancedVpcParams && vpc.useExistingVpc ? false : Boolean(vpc);\n },\n pulumi(...args) {\n const [{ getParam }] = args;\n const vpc = getParam(projectAppParams.vpc);\n const usingAdvancedVpcParams = vpc && typeof vpc !== \"boolean\";\n\n // Not using advanced VPC params? Then immediately exit.\n if (!usingAdvancedVpcParams) {\n return projectAppParams.pulumi?.(...args);\n }\n\n const [{ onResource, addResource }] = args;\n const { useExistingVpc } = vpc;\n\n if (useExistingVpc) {\n if (!useExistingVpc.lambdaFunctionsVpcConfig) {\n throw new Error(\n \"Cannot specify `useExistingVpc` parameter because the `lambdaFunctionsVpcConfig` parameter wasn't provided.\"\n );\n }\n\n onResource(resource => {\n if (isResourceOfType(resource, aws.lambda.Function)) {\n resource.config.vpcConfig(useExistingVpc!.lambdaFunctionsVpcConfig);\n }\n\n if (isResourceOfType(resource, aws.iam.Role)) {\n if (resource.meta.isLambdaFunctionRole) {\n addResource(aws.iam.RolePolicyAttachment, {\n name: `${resource.name}-vpc-access-execution-role`,\n config: {\n role: resource.output.name,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n }\n }\n });\n }\n\n return projectAppParams.pulumi?.(...args);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAIA;;AAeO,SAASA,sBAAT,CAAgCC,gBAA8C,GAAG,EAAjF,EAAqF;EACxF,OAAO,IAAAC,8CAAA,8DACAD,gBADA;IAEH;IACAE,GAAG,EAAE,CAAC;MAAEC;IAAF,CAAD,KAAkB;MACnB,MAAMD,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD;MACA,OAAOE,sBAAsB,IAAIF,GAAG,CAACG,cAA9B,GAA+C,KAA/C,GAAuDC,OAAO,CAACJ,GAAD,CAArE;IACH,CAPE;;IAQHK,MAAM,CAAC,GAAGC,IAAJ,EAAU;MAAA;;MACZ,MAAM,CAAC;QAAEL;MAAF,CAAD,IAAiBK,IAAvB;MACA,MAAMN,GAAG,GAAGC,QAAQ,CAACH,gBAAgB,CAACE,GAAlB,CAApB;MACA,MAAME,sBAAsB,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,SAArD,CAHY,CAKZ;;MACA,IAAI,CAACE,sBAAL,EAA6B;QAAA;;QACzB,gCAAOJ,gBAAgB,CAACO,MAAxB,0DAAO,2BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;MACH;;MAED,MAAM,CAAC;QAAEC,UAAF;QAAcC;MAAd,CAAD,IAAgCF,IAAtC;MACA,MAAM;QAAEH;MAAF,IAAqBH,GAA3B;;MAEA,IAAIG,cAAJ,EAAoB;QAChB,IAAI,CAACA,cAAc,CAACM,wBAApB,EAA8C;UAC1C,MAAM,IAAIC,KAAJ,CACF,6GADE,CAAN;QAGH;;QAEDH,UAAU,CAACI,QAAQ,IAAI;UACnB,IAAI,IAAAC,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACC,MAAJ,CAAWC,QAAtC,CAAJ,EAAqD;YACjDJ,QAAQ,CAACK,MAAT,CAAgBC,SAAhB,CAA0Bd,cAAc,CAAEM,wBAA1C;UACH;;UAED,IAAI,IAAAG,wBAAA,EAAiBD,QAAjB,EAA2BE,GAAG,CAACK,GAAJ,CAAQC,IAAnC,CAAJ,EAA8C;YAC1C,IAAIR,QAAQ,CAACS,IAAT,CAAcC,oBAAlB,EAAwC;cACpCb,WAAW,CAACK,GAAG,CAACK,GAAJ,CAAQI,oBAAT,EAA+B;gBACtCC,IAAI,EAAG,GAAEZ,QAAQ,CAACY,IAAK,4BADe;gBAEtCP,MAAM,EAAE;kBACJQ,IAAI,EAAEb,QAAQ,CAACc,MAAT,CAAgBF,IADlB;kBAEJG,SAAS,EAAEb,GAAG,CAACK,GAAJ,CAAQS,aAAR,CAAsBC;gBAF7B;cAF8B,CAA/B,CAAX;YAOH;UACJ;QACJ,CAhBS,CAAV;MAiBH;;MAED,iCAAO9B,gBAAgB,CAACO,MAAxB,2DAAO,4BAAAP,gBAAgB,EAAU,GAAGQ,IAAb,CAAvB;IACH;;EAhDE,GAAP;AAkDH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/pulumi-aws",
3
- "version": "5.34.6-beta.0",
3
+ "version": "5.34.6-beta.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/webiny/webiny-js.git"
@@ -15,8 +15,8 @@
15
15
  "dependencies": {
16
16
  "@pulumi/aws": "^5.8.0",
17
17
  "@pulumi/pulumi": "^3.34.0",
18
- "@webiny/cli-plugin-deploy-pulumi": "5.34.6-beta.0",
19
- "@webiny/pulumi": "5.34.6-beta.0",
18
+ "@webiny/cli-plugin-deploy-pulumi": "5.34.6-beta.1",
19
+ "@webiny/pulumi": "5.34.6-beta.1",
20
20
  "form-data": "4.0.0",
21
21
  "node-fetch": "2.6.7"
22
22
  },
@@ -26,10 +26,10 @@
26
26
  "@babel/preset-env": "^7.19.4",
27
27
  "@babel/preset-typescript": "^7.18.6",
28
28
  "@babel/runtime": "^7.19.0",
29
- "@webiny/api-page-builder": "^5.34.6-beta.0",
30
- "@webiny/aws-layers": "^5.34.6-beta.0",
31
- "@webiny/cli": "^5.34.6-beta.0",
32
- "@webiny/project-utils": "^5.34.6-beta.0",
29
+ "@webiny/api-page-builder": "^5.34.6-beta.1",
30
+ "@webiny/aws-layers": "^5.34.6-beta.1",
31
+ "@webiny/cli": "^5.34.6-beta.1",
32
+ "@webiny/project-utils": "^5.34.6-beta.1",
33
33
  "chalk": "^4.1.0",
34
34
  "lodash": "^4.5.0",
35
35
  "mime": "2.5.2",
@@ -49,5 +49,5 @@
49
49
  ]
50
50
  }
51
51
  },
52
- "gitHead": "143093ae7993a5c0284d84a1ec12656bcc425515"
52
+ "gitHead": "b7061794941b0f9af67fd129755f456cf5f381e8"
53
53
  }
@@ -1,20 +0,0 @@
1
- import * as aws from "@pulumi/aws";
2
- import { PulumiAppResource, PulumiAppResourceConstructor, PulumiAppRemoteResource } from "@webiny/pulumi";
3
- export interface OpenSearchParams {
4
- protect: boolean;
5
- }
6
- /**
7
- * THIS MODULE IS CURRENTLY NOT USED!!
8
- * At the time of writing, Pulumi will NOT generate a unique suffix for the OpenSearch domain name.
9
- */
10
- export declare const OpenSearch: import("@webiny/pulumi").PulumiAppModuleDefinition<{
11
- domain: PulumiAppResource<PulumiAppResourceConstructor<import("@pulumi/aws/opensearch/domain").Domain, any>> | PulumiAppRemoteResource<aws.opensearch.GetDomainResult>;
12
- domainPolicy: PulumiAppResource<typeof import("@pulumi/aws/opensearch/domainPolicy").DomainPolicy> | undefined;
13
- table: PulumiAppResource<typeof import("@pulumi/aws/dynamodb/table").Table>;
14
- dynamoToElastic: {
15
- role: PulumiAppResource<typeof import("@pulumi/aws/iam/role").Role>;
16
- policy: PulumiAppResource<typeof import("@pulumi/aws/iam/policy").Policy>;
17
- lambda: PulumiAppResource<typeof import("@pulumi/aws/lambda/function").Function>;
18
- eventSourceMapping: PulumiAppResource<typeof import("@pulumi/aws/lambda/eventSourceMapping").EventSourceMapping>;
19
- };
20
- }, OpenSearchParams>;
@@ -1,262 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
-
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.OpenSearch = void 0;
11
-
12
- var _path = _interopRequireDefault(require("path"));
13
-
14
- var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
-
16
- var aws = _interopRequireWildcard(require("@pulumi/aws"));
17
-
18
- var _pulumi2 = require("@webiny/pulumi");
19
-
20
- var _awsUtils = require("../awsUtils");
21
-
22
- var _CoreVpc = require("./CoreVpc");
23
-
24
- /**
25
- * THIS MODULE IS CURRENTLY NOT USED!!
26
- * At the time of writing, Pulumi will NOT generate a unique suffix for the OpenSearch domain name.
27
- */
28
- const OpenSearch = (0, _pulumi2.createAppModule)({
29
- name: "OpenSearch",
30
-
31
- config(app, params) {
32
- const domainName = "webiny-js";
33
- const accountId = (0, _awsUtils.getAwsAccountId)(app);
34
- const vpc = app.getModule(_CoreVpc.CoreVpc, {
35
- optional: true
36
- }); // This needs to be implemented in order to be able to use a shared OpenSearch cluster.
37
-
38
- let domain;
39
- let domainPolicy;
40
-
41
- if (process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME) {
42
- const domainName = String(process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME); // This can be useful for testing purposes in ephemeral environments. More information here:
43
- // https://www.webiny.com/docs/key-topics/ci-cd/testing/slow-ephemeral-environments
44
-
45
- domain = app.addRemoteResource(domainName, () => {
46
- return aws.opensearch.getDomain({
47
- domainName
48
- }, {
49
- async: true
50
- });
51
- });
52
- } else {
53
- // Regular OpenSearch deployment.
54
- domain = app.addResource(aws.opensearch.Domain, {
55
- name: domainName,
56
- config: {
57
- domainName,
58
- engineVersion: "OpenSearch_1.2",
59
- clusterConfig: {
60
- instanceType: "t3.medium.search",
61
- instanceCount: 2,
62
- zoneAwarenessEnabled: true,
63
- zoneAwarenessConfig: {
64
- availabilityZoneCount: 2
65
- }
66
- },
67
- vpcOptions: vpc ? {
68
- subnetIds: vpc.subnets.private.map(s => s.output.id),
69
- securityGroupIds: [vpc.vpc.output.defaultSecurityGroupId]
70
- } : undefined,
71
- ebsOptions: {
72
- ebsEnabled: true,
73
- volumeSize: 10,
74
- volumeType: "gp2"
75
- },
76
- advancedOptions: {
77
- "rest.action.multi.allow_explicit_index": "true"
78
- },
79
- snapshotOptions: {
80
- automatedSnapshotStartHour: 23
81
- }
82
- },
83
- opts: {
84
- protect: params.protect
85
- }
86
- });
87
- /**
88
- * Domain policy defines who can access your Elasticsearch Domain.
89
- * For details on Elasticsearch security, read the official documentation:
90
- * https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/security.html
91
- */
92
-
93
- domainPolicy = app.addResource(aws.opensearch.DomainPolicy, {
94
- name: `${domainName}-policy`,
95
- config: {
96
- domainName: domain.output.domainName,
97
- accessPolicies: pulumi.interpolate`{
98
- "Version": "2012-10-17",
99
- "Statement": [
100
- {
101
- "Effect": "Allow",
102
- "Principal": {
103
- "AWS": "${accountId}"
104
- },
105
- "Action": "es:*",
106
- "Resource": "${domain.output.arn}/*"
107
- }
108
- ]
109
- }`
110
- },
111
- opts: {
112
- protect: params.protect
113
- }
114
- });
115
- }
116
- /**
117
- * Create a table for Elasticsearch records. All ES records are stored in this table to dramatically improve
118
- * performance and stability on write operations (especially massive data imports). This table also serves as a backup and
119
- * a single source of truth for your Elasticsearch domain. Streaming is enabled on this table, and it will
120
- * allow asynchronous synchronization of data with Elasticsearch domain.
121
- */
122
-
123
-
124
- const table = app.addResource(aws.dynamodb.Table, {
125
- name: "webiny-es",
126
- config: {
127
- attributes: [{
128
- name: "PK",
129
- type: "S"
130
- }, {
131
- name: "SK",
132
- type: "S"
133
- }],
134
- streamEnabled: true,
135
- streamViewType: "NEW_AND_OLD_IMAGES",
136
- billingMode: "PAY_PER_REQUEST",
137
- hashKey: "PK",
138
- rangeKey: "SK"
139
- },
140
- opts: {
141
- protect: params.protect
142
- }
143
- });
144
- const roleName = "dynamo-to-elastic-lambda-role";
145
- const role = app.addResource(aws.iam.Role, {
146
- name: roleName,
147
- config: {
148
- assumeRolePolicy: {
149
- Version: "2012-10-17",
150
- Statement: [{
151
- Action: "sts:AssumeRole",
152
- Principal: {
153
- Service: "lambda.amazonaws.com"
154
- },
155
- Effect: "Allow"
156
- }]
157
- }
158
- }
159
- });
160
- const policy = getDynamoDbToElasticLambdaPolicy(app, domain.output);
161
- app.addResource(aws.iam.RolePolicyAttachment, {
162
- name: `${roleName}-DynamoDbToElasticLambdaPolicy`,
163
- config: {
164
- role: role.output,
165
- policyArn: policy.output.arn
166
- }
167
- });
168
- app.addResource(aws.iam.RolePolicyAttachment, {
169
- name: `${roleName}-AWSLambdaVPCAccessExecutionRole`,
170
- config: {
171
- role: role.output,
172
- policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole
173
- }
174
- });
175
- app.addResource(aws.iam.RolePolicyAttachment, {
176
- name: `${roleName}-AWSLambdaDynamoDBExecutionRole`,
177
- config: {
178
- role: role.output,
179
- policyArn: aws.iam.ManagedPolicy.AWSLambdaDynamoDBExecutionRole
180
- }
181
- });
182
- /**
183
- * This Lambda will process the stream events from DynamoDB table that contains Elasticsearch items.
184
- * Elasticsearch can't take large amount of individual writes in a short period of time, so this way
185
- * we store data for Elasticsearch in a DynamoDB table, and asynchronously insert it into Elasticsearch
186
- * using batching.
187
- */
188
-
189
- const lambda = app.addResource(aws.lambda.Function, {
190
- name: "dynamo-to-elastic",
191
- config: {
192
- role: role.output.arn,
193
- runtime: "nodejs14.x",
194
- handler: "handler.handler",
195
- timeout: 600,
196
- memorySize: 512,
197
- environment: {
198
- variables: {
199
- DEBUG: String(process.env.DEBUG),
200
- ELASTIC_SEARCH_ENDPOINT: domain.output.endpoint
201
- }
202
- },
203
- description: "Process DynamoDB Stream.",
204
- code: new pulumi.asset.AssetArchive({
205
- ".": new pulumi.asset.FileArchive(_path.default.join(app.paths.workspace, "dynamoToElastic/build"))
206
- }),
207
- vpcConfig: vpc ? {
208
- subnetIds: vpc.subnets.private.map(s => s.output.id),
209
- securityGroupIds: [vpc.vpc.output.defaultSecurityGroupId]
210
- } : undefined
211
- }
212
- });
213
- const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {
214
- name: "dynamo-to-elastic",
215
- config: {
216
- eventSourceArn: table.output.streamArn,
217
- functionName: lambda.output.arn,
218
- startingPosition: "LATEST",
219
- maximumRetryAttempts: 3,
220
- batchSize: 1000,
221
- maximumBatchingWindowInSeconds: 1
222
- }
223
- });
224
- app.addOutputs({
225
- elasticsearchDomainArn: domain.output.arn,
226
- elasticsearchDomainEndpoint: domain.output.endpoint,
227
- elasticsearchDynamodbTableArn: table.output.arn,
228
- elasticsearchDynamodbTableName: table.output.name
229
- });
230
- return {
231
- domain,
232
- domainPolicy,
233
- table,
234
- dynamoToElastic: {
235
- role,
236
- policy,
237
- lambda,
238
- eventSourceMapping
239
- }
240
- };
241
- }
242
-
243
- });
244
- exports.OpenSearch = OpenSearch;
245
-
246
- function getDynamoDbToElasticLambdaPolicy(app, domain) {
247
- return app.addResource(aws.iam.Policy, {
248
- name: "DynamoDbToElasticLambdaPolicy-updated",
249
- config: {
250
- description: "This policy enables access to ES and Dynamodb streams",
251
- policy: {
252
- Version: "2012-10-17",
253
- Statement: [{
254
- Sid: "PermissionForES",
255
- Effect: "Allow",
256
- Action: ["es:ESHttpDelete", "es:ESHttpPatch", "es:ESHttpPost", "es:ESHttpPut"],
257
- Resource: [pulumi.interpolate`${domain.arn}`, pulumi.interpolate`${domain.arn}/*`]
258
- }]
259
- }
260
- }
261
- });
262
- }
@@ -1 +0,0 @@
1
- {"version":3,"names":["OpenSearch","createAppModule","name","config","app","params","domainName","accountId","getAwsAccountId","vpc","getModule","CoreVpc","optional","domain","domainPolicy","process","env","AWS_ELASTIC_SEARCH_DOMAIN_NAME","String","addRemoteResource","aws","opensearch","getDomain","async","addResource","Domain","engineVersion","clusterConfig","instanceType","instanceCount","zoneAwarenessEnabled","zoneAwarenessConfig","availabilityZoneCount","vpcOptions","subnetIds","subnets","private","map","s","output","id","securityGroupIds","defaultSecurityGroupId","undefined","ebsOptions","ebsEnabled","volumeSize","volumeType","advancedOptions","snapshotOptions","automatedSnapshotStartHour","opts","protect","DomainPolicy","accessPolicies","pulumi","interpolate","arn","table","dynamodb","Table","attributes","type","streamEnabled","streamViewType","billingMode","hashKey","rangeKey","roleName","role","iam","Role","assumeRolePolicy","Version","Statement","Action","Principal","Service","Effect","policy","getDynamoDbToElasticLambdaPolicy","RolePolicyAttachment","policyArn","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","AWSLambdaDynamoDBExecutionRole","lambda","Function","runtime","handler","timeout","memorySize","environment","variables","DEBUG","ELASTIC_SEARCH_ENDPOINT","endpoint","description","code","asset","AssetArchive","FileArchive","path","join","paths","workspace","vpcConfig","eventSourceMapping","EventSourceMapping","eventSourceArn","streamArn","functionName","startingPosition","maximumRetryAttempts","batchSize","maximumBatchingWindowInSeconds","addOutputs","elasticsearchDomainArn","elasticsearchDomainEndpoint","elasticsearchDynamodbTableArn","elasticsearchDynamodbTableName","dynamoToElastic","Policy","Sid","Resource"],"sources":["CoreOpenSearch.ts"],"sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport {\n createAppModule,\n PulumiApp,\n PulumiAppResource,\n PulumiAppResourceConstructor,\n PulumiAppRemoteResource\n} from \"@webiny/pulumi\";\n\nimport { getAwsAccountId } from \"../awsUtils\";\nimport { CoreVpc } from \"./CoreVpc\";\n\nexport interface OpenSearchParams {\n protect: boolean;\n}\n\n/**\n * THIS MODULE IS CURRENTLY NOT USED!!\n * At the time of writing, Pulumi will NOT generate a unique suffix for the OpenSearch domain name.\n */\n\nexport const OpenSearch = createAppModule({\n name: \"OpenSearch\",\n config(app, params: OpenSearchParams) {\n const domainName = \"webiny-js\";\n const accountId = getAwsAccountId(app);\n\n const vpc = app.getModule(CoreVpc, { optional: true });\n\n // This needs to be implemented in order to be able to use a shared OpenSearch cluster.\n let domain:\n | PulumiAppResource<PulumiAppResourceConstructor<aws.opensearch.Domain>>\n | PulumiAppRemoteResource<aws.opensearch.GetDomainResult>;\n\n let domainPolicy;\n\n if (process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME) {\n const domainName = String(process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME);\n // This can be useful for testing purposes in ephemeral environments. More information here:\n // https://www.webiny.com/docs/key-topics/ci-cd/testing/slow-ephemeral-environments\n domain = app.addRemoteResource(domainName, () => {\n return aws.opensearch.getDomain({ domainName }, { async: true });\n });\n } else {\n // Regular OpenSearch deployment.\n domain = app.addResource(aws.opensearch.Domain, {\n name: domainName,\n config: {\n domainName,\n engineVersion: \"OpenSearch_1.2\",\n clusterConfig: {\n instanceType: \"t3.medium.search\",\n instanceCount: 2,\n zoneAwarenessEnabled: true,\n zoneAwarenessConfig: {\n availabilityZoneCount: 2\n }\n },\n vpcOptions: vpc\n ? {\n subnetIds: vpc.subnets.private.map(s => s.output.id),\n securityGroupIds: [vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined,\n ebsOptions: {\n ebsEnabled: true,\n volumeSize: 10,\n volumeType: \"gp2\"\n },\n advancedOptions: {\n \"rest.action.multi.allow_explicit_index\": \"true\"\n },\n snapshotOptions: {\n automatedSnapshotStartHour: 23\n }\n },\n opts: { protect: params.protect }\n });\n\n /**\n * Domain policy defines who can access your Elasticsearch Domain.\n * For details on Elasticsearch security, read the official documentation:\n * https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/security.html\n */\n domainPolicy = app.addResource(aws.opensearch.DomainPolicy, {\n name: `${domainName}-policy`,\n config: {\n domainName: domain.output.domainName,\n accessPolicies: pulumi.interpolate`{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"${accountId}\"\n },\n \"Action\": \"es:*\",\n \"Resource\": \"${domain.output.arn}/*\"\n }\n ]\n }`\n },\n opts: { protect: params.protect }\n });\n }\n\n /**\n * Create a table for Elasticsearch records. All ES records are stored in this table to dramatically improve\n * performance and stability on write operations (especially massive data imports). This table also serves as a backup and\n * a single source of truth for your Elasticsearch domain. Streaming is enabled on this table, and it will\n * allow asynchronous synchronization of data with Elasticsearch domain.\n */\n const table = app.addResource(aws.dynamodb.Table, {\n name: \"webiny-es\",\n config: {\n attributes: [\n { name: \"PK\", type: \"S\" },\n { name: \"SK\", type: \"S\" }\n ],\n streamEnabled: true,\n streamViewType: \"NEW_AND_OLD_IMAGES\",\n billingMode: \"PAY_PER_REQUEST\",\n hashKey: \"PK\",\n rangeKey: \"SK\"\n },\n opts: { protect: params.protect }\n });\n\n const roleName = \"dynamo-to-elastic-lambda-role\";\n\n const role = app.addResource(aws.iam.Role, {\n name: roleName,\n config: {\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: {\n Service: \"lambda.amazonaws.com\"\n },\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const policy = getDynamoDbToElasticLambdaPolicy(app, domain.output);\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${roleName}-DynamoDbToElasticLambdaPolicy`,\n config: {\n role: role.output,\n policyArn: policy.output.arn\n }\n });\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${roleName}-AWSLambdaVPCAccessExecutionRole`,\n config: {\n role: role.output,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n }\n });\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${roleName}-AWSLambdaDynamoDBExecutionRole`,\n config: {\n role: role.output,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaDynamoDBExecutionRole\n }\n });\n\n /**\n * This Lambda will process the stream events from DynamoDB table that contains Elasticsearch items.\n * Elasticsearch can't take large amount of individual writes in a short period of time, so this way\n * we store data for Elasticsearch in a DynamoDB table, and asynchronously insert it into Elasticsearch\n * using batching.\n */\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"dynamo-to-elastic\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 600,\n memorySize: 512,\n environment: {\n variables: {\n DEBUG: String(process.env.DEBUG),\n ELASTIC_SEARCH_ENDPOINT: domain.output.endpoint\n }\n },\n description: \"Process DynamoDB Stream.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"dynamoToElastic/build\")\n )\n }),\n vpcConfig: vpc\n ? {\n subnetIds: vpc.subnets.private.map(s => s.output.id),\n securityGroupIds: [vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {\n name: \"dynamo-to-elastic\",\n config: {\n eventSourceArn: table.output.streamArn,\n functionName: lambda.output.arn,\n startingPosition: \"LATEST\",\n maximumRetryAttempts: 3,\n batchSize: 1000,\n maximumBatchingWindowInSeconds: 1\n }\n });\n\n app.addOutputs({\n elasticsearchDomainArn: domain.output.arn,\n elasticsearchDomainEndpoint: domain.output.endpoint,\n elasticsearchDynamodbTableArn: table.output.arn,\n elasticsearchDynamodbTableName: table.output.name\n });\n\n return {\n domain,\n domainPolicy,\n table,\n dynamoToElastic: {\n role,\n policy,\n lambda,\n eventSourceMapping\n }\n };\n }\n});\n\nfunction getDynamoDbToElasticLambdaPolicy(\n app: PulumiApp,\n domain: pulumi.Output<aws.opensearch.Domain | aws.opensearch.GetDomainResult>\n) {\n return app.addResource(aws.iam.Policy, {\n name: \"DynamoDbToElasticLambdaPolicy-updated\",\n config: {\n description: \"This policy enables access to ES and Dynamodb streams\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForES\",\n Effect: \"Allow\",\n Action: [\n \"es:ESHttpDelete\",\n \"es:ESHttpPatch\",\n \"es:ESHttpPost\",\n \"es:ESHttpPut\"\n ],\n Resource: [\n pulumi.interpolate`${domain.arn}`,\n pulumi.interpolate`${domain.arn}/*`\n ]\n }\n ]\n }\n }\n });\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAQA;;AACA;;AAMA;AACA;AACA;AACA;AAEO,MAAMA,UAAU,GAAG,IAAAC,wBAAA,EAAgB;EACtCC,IAAI,EAAE,YADgC;;EAEtCC,MAAM,CAACC,GAAD,EAAMC,MAAN,EAAgC;IAClC,MAAMC,UAAU,GAAG,WAAnB;IACA,MAAMC,SAAS,GAAG,IAAAC,yBAAA,EAAgBJ,GAAhB,CAAlB;IAEA,MAAMK,GAAG,GAAGL,GAAG,CAACM,SAAJ,CAAcC,gBAAd,EAAuB;MAAEC,QAAQ,EAAE;IAAZ,CAAvB,CAAZ,CAJkC,CAMlC;;IACA,IAAIC,MAAJ;IAIA,IAAIC,YAAJ;;IAEA,IAAIC,OAAO,CAACC,GAAR,CAAYC,8BAAhB,EAAgD;MAC5C,MAAMX,UAAU,GAAGY,MAAM,CAACH,OAAO,CAACC,GAAR,CAAYC,8BAAb,CAAzB,CAD4C,CAE5C;MACA;;MACAJ,MAAM,GAAGT,GAAG,CAACe,iBAAJ,CAAsBb,UAAtB,EAAkC,MAAM;QAC7C,OAAOc,GAAG,CAACC,UAAJ,CAAeC,SAAf,CAAyB;UAAEhB;QAAF,CAAzB,EAAyC;UAAEiB,KAAK,EAAE;QAAT,CAAzC,CAAP;MACH,CAFQ,CAAT;IAGH,CAPD,MAOO;MACH;MACAV,MAAM,GAAGT,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACC,UAAJ,CAAeI,MAA/B,EAAuC;QAC5CvB,IAAI,EAAEI,UADsC;QAE5CH,MAAM,EAAE;UACJG,UADI;UAEJoB,aAAa,EAAE,gBAFX;UAGJC,aAAa,EAAE;YACXC,YAAY,EAAE,kBADH;YAEXC,aAAa,EAAE,CAFJ;YAGXC,oBAAoB,EAAE,IAHX;YAIXC,mBAAmB,EAAE;cACjBC,qBAAqB,EAAE;YADN;UAJV,CAHX;UAWJC,UAAU,EAAExB,GAAG,GACT;YACIyB,SAAS,EAAEzB,GAAG,CAAC0B,OAAJ,CAAYC,OAAZ,CAAoBC,GAApB,CAAwBC,CAAC,IAAIA,CAAC,CAACC,MAAF,CAASC,EAAtC,CADf;YAEIC,gBAAgB,EAAE,CAAChC,GAAG,CAACA,GAAJ,CAAQ8B,MAAR,CAAeG,sBAAhB;UAFtB,CADS,GAKTC,SAhBF;UAiBJC,UAAU,EAAE;YACRC,UAAU,EAAE,IADJ;YAERC,UAAU,EAAE,EAFJ;YAGRC,UAAU,EAAE;UAHJ,CAjBR;UAsBJC,eAAe,EAAE;YACb,0CAA0C;UAD7B,CAtBb;UAyBJC,eAAe,EAAE;YACbC,0BAA0B,EAAE;UADf;QAzBb,CAFoC;QA+B5CC,IAAI,EAAE;UAAEC,OAAO,EAAE/C,MAAM,CAAC+C;QAAlB;MA/BsC,CAAvC,CAAT;MAkCA;AACZ;AACA;AACA;AACA;;MACYtC,YAAY,GAAGV,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACC,UAAJ,CAAegC,YAA/B,EAA6C;QACxDnD,IAAI,EAAG,GAAEI,UAAW,SADoC;QAExDH,MAAM,EAAE;UACJG,UAAU,EAAEO,MAAM,CAAC0B,MAAP,CAAcjC,UADtB;UAEJgD,cAAc,EAAEC,MAAM,CAACC,WAAY;AACvD;AACA;AACA;AACA;AACA;AACA,8CAA8CjD,SAAU;AACxD;AACA;AACA,+CAA+CM,MAAM,CAAC0B,MAAP,CAAckB,GAAI;AACjE;AACA;AACA;QAdwB,CAFgD;QAkBxDN,IAAI,EAAE;UAAEC,OAAO,EAAE/C,MAAM,CAAC+C;QAAlB;MAlBkD,CAA7C,CAAf;IAoBH;IAED;AACR;AACA;AACA;AACA;AACA;;;IACQ,MAAMM,KAAK,GAAGtD,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACuC,QAAJ,CAAaC,KAA7B,EAAoC;MAC9C1D,IAAI,EAAE,WADwC;MAE9CC,MAAM,EAAE;QACJ0D,UAAU,EAAE,CACR;UAAE3D,IAAI,EAAE,IAAR;UAAc4D,IAAI,EAAE;QAApB,CADQ,EAER;UAAE5D,IAAI,EAAE,IAAR;UAAc4D,IAAI,EAAE;QAApB,CAFQ,CADR;QAKJC,aAAa,EAAE,IALX;QAMJC,cAAc,EAAE,oBANZ;QAOJC,WAAW,EAAE,iBAPT;QAQJC,OAAO,EAAE,IARL;QASJC,QAAQ,EAAE;MATN,CAFsC;MAa9ChB,IAAI,EAAE;QAAEC,OAAO,EAAE/C,MAAM,CAAC+C;MAAlB;IAbwC,CAApC,CAAd;IAgBA,MAAMgB,QAAQ,GAAG,+BAAjB;IAEA,MAAMC,IAAI,GAAGjE,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkD,GAAJ,CAAQC,IAAxB,EAA8B;MACvCrE,IAAI,EAAEkE,QADiC;MAEvCjE,MAAM,EAAE;QACJqE,gBAAgB,EAAE;UACdC,OAAO,EAAE,YADK;UAEdC,SAAS,EAAE,CACP;YACIC,MAAM,EAAE,gBADZ;YAEIC,SAAS,EAAE;cACPC,OAAO,EAAE;YADF,CAFf;YAKIC,MAAM,EAAE;UALZ,CADO;QAFG;MADd;IAF+B,CAA9B,CAAb;IAkBA,MAAMC,MAAM,GAAGC,gCAAgC,CAAC5E,GAAD,EAAMS,MAAM,CAAC0B,MAAb,CAA/C;IAEAnC,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkD,GAAJ,CAAQW,oBAAxB,EAA8C;MAC1C/E,IAAI,EAAG,GAAEkE,QAAS,gCADwB;MAE1CjE,MAAM,EAAE;QACJkE,IAAI,EAAEA,IAAI,CAAC9B,MADP;QAEJ2C,SAAS,EAAEH,MAAM,CAACxC,MAAP,CAAckB;MAFrB;IAFkC,CAA9C;IAQArD,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkD,GAAJ,CAAQW,oBAAxB,EAA8C;MAC1C/E,IAAI,EAAG,GAAEkE,QAAS,kCADwB;MAE1CjE,MAAM,EAAE;QACJkE,IAAI,EAAEA,IAAI,CAAC9B,MADP;QAEJ2C,SAAS,EAAE9D,GAAG,CAACkD,GAAJ,CAAQa,aAAR,CAAsBC;MAF7B;IAFkC,CAA9C;IAQAhF,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkD,GAAJ,CAAQW,oBAAxB,EAA8C;MAC1C/E,IAAI,EAAG,GAAEkE,QAAS,iCADwB;MAE1CjE,MAAM,EAAE;QACJkE,IAAI,EAAEA,IAAI,CAAC9B,MADP;QAEJ2C,SAAS,EAAE9D,GAAG,CAACkD,GAAJ,CAAQa,aAAR,CAAsBE;MAF7B;IAFkC,CAA9C;IAQA;AACR;AACA;AACA;AACA;AACA;;IACQ,MAAMC,MAAM,GAAGlF,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkE,MAAJ,CAAWC,QAA3B,EAAqC;MAChDrF,IAAI,EAAE,mBAD0C;MAEhDC,MAAM,EAAE;QACJkE,IAAI,EAAEA,IAAI,CAAC9B,MAAL,CAAYkB,GADd;QAEJ+B,OAAO,EAAE,YAFL;QAGJC,OAAO,EAAE,iBAHL;QAIJC,OAAO,EAAE,GAJL;QAKJC,UAAU,EAAE,GALR;QAMJC,WAAW,EAAE;UACTC,SAAS,EAAE;YACPC,KAAK,EAAE5E,MAAM,CAACH,OAAO,CAACC,GAAR,CAAY8E,KAAb,CADN;YAEPC,uBAAuB,EAAElF,MAAM,CAAC0B,MAAP,CAAcyD;UAFhC;QADF,CANT;QAYJC,WAAW,EAAE,0BAZT;QAaJC,IAAI,EAAE,IAAI3C,MAAM,CAAC4C,KAAP,CAAaC,YAAjB,CAA8B;UAChC,KAAK,IAAI7C,MAAM,CAAC4C,KAAP,CAAaE,WAAjB,CACDC,aAAA,CAAKC,IAAL,CAAUnG,GAAG,CAACoG,KAAJ,CAAUC,SAApB,EAA+B,uBAA/B,CADC;QAD2B,CAA9B,CAbF;QAkBJC,SAAS,EAAEjG,GAAG,GACR;UACIyB,SAAS,EAAEzB,GAAG,CAAC0B,OAAJ,CAAYC,OAAZ,CAAoBC,GAApB,CAAwBC,CAAC,IAAIA,CAAC,CAACC,MAAF,CAASC,EAAtC,CADf;UAEIC,gBAAgB,EAAE,CAAChC,GAAG,CAACA,GAAJ,CAAQ8B,MAAR,CAAeG,sBAAhB;QAFtB,CADQ,GAKRC;MAvBF;IAFwC,CAArC,CAAf;IA6BA,MAAMgE,kBAAkB,GAAGvG,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkE,MAAJ,CAAWsB,kBAA3B,EAA+C;MACtE1G,IAAI,EAAE,mBADgE;MAEtEC,MAAM,EAAE;QACJ0G,cAAc,EAAEnD,KAAK,CAACnB,MAAN,CAAauE,SADzB;QAEJC,YAAY,EAAEzB,MAAM,CAAC/C,MAAP,CAAckB,GAFxB;QAGJuD,gBAAgB,EAAE,QAHd;QAIJC,oBAAoB,EAAE,CAJlB;QAKJC,SAAS,EAAE,IALP;QAMJC,8BAA8B,EAAE;MAN5B;IAF8D,CAA/C,CAA3B;IAYA/G,GAAG,CAACgH,UAAJ,CAAe;MACXC,sBAAsB,EAAExG,MAAM,CAAC0B,MAAP,CAAckB,GAD3B;MAEX6D,2BAA2B,EAAEzG,MAAM,CAAC0B,MAAP,CAAcyD,QAFhC;MAGXuB,6BAA6B,EAAE7D,KAAK,CAACnB,MAAN,CAAakB,GAHjC;MAIX+D,8BAA8B,EAAE9D,KAAK,CAACnB,MAAN,CAAarC;IAJlC,CAAf;IAOA,OAAO;MACHW,MADG;MAEHC,YAFG;MAGH4C,KAHG;MAIH+D,eAAe,EAAE;QACbpD,IADa;QAEbU,MAFa;QAGbO,MAHa;QAIbqB;MAJa;IAJd,CAAP;EAWH;;AA1NqC,CAAhB,CAAnB;;;AA6NP,SAAS3B,gCAAT,CACI5E,GADJ,EAEIS,MAFJ,EAGE;EACE,OAAOT,GAAG,CAACoB,WAAJ,CAAgBJ,GAAG,CAACkD,GAAJ,CAAQoD,MAAxB,EAAgC;IACnCxH,IAAI,EAAE,uCAD6B;IAEnCC,MAAM,EAAE;MACJ8F,WAAW,EAAE,uDADT;MAEJlB,MAAM,EAAE;QACJN,OAAO,EAAE,YADL;QAEJC,SAAS,EAAE,CACP;UACIiD,GAAG,EAAE,iBADT;UAEI7C,MAAM,EAAE,OAFZ;UAGIH,MAAM,EAAE,CACJ,iBADI,EAEJ,gBAFI,EAGJ,eAHI,EAIJ,cAJI,CAHZ;UASIiD,QAAQ,EAAE,CACNrE,MAAM,CAACC,WAAY,GAAE3C,MAAM,CAAC4C,GAAI,EAD1B,EAENF,MAAM,CAACC,WAAY,GAAE3C,MAAM,CAAC4C,GAAI,IAF1B;QATd,CADO;MAFP;IAFJ;EAF2B,CAAhC,CAAP;AAyBH"}