@webiny/pulumi-aws 5.33.5-beta.0 → 5.34.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/apps/admin/createAdminPulumiApp.d.ts +5 -5
  2. package/apps/admin/createAdminPulumiApp.js +3 -7
  3. package/apps/admin/createAdminPulumiApp.js.map +1 -1
  4. package/apps/api/ApiApwScheduler.d.ts +8 -9
  5. package/apps/api/ApiApwScheduler.js +6 -12
  6. package/apps/api/ApiApwScheduler.js.map +1 -1
  7. package/apps/api/ApiCloudfront.d.ts +1 -2
  8. package/apps/api/ApiCloudfront.js +2 -4
  9. package/apps/api/ApiCloudfront.js.map +1 -1
  10. package/apps/api/ApiFileManager.d.ts +4 -5
  11. package/apps/api/ApiFileManager.js +8 -13
  12. package/apps/api/ApiFileManager.js.map +1 -1
  13. package/apps/api/ApiGateway.d.ts +5 -6
  14. package/apps/api/ApiGateway.js +2 -4
  15. package/apps/api/ApiGateway.js.map +1 -1
  16. package/apps/api/ApiGraphql.d.ts +3 -3
  17. package/apps/api/ApiGraphql.js +5 -11
  18. package/apps/api/ApiGraphql.js.map +1 -1
  19. package/apps/api/ApiHeadlessCMS.d.ts +3 -4
  20. package/apps/api/ApiHeadlessCMS.js +5 -11
  21. package/apps/api/ApiHeadlessCMS.js.map +1 -1
  22. package/apps/api/ApiPageBuilder.d.ts +10 -11
  23. package/apps/api/ApiPageBuilder.js +37 -42
  24. package/apps/api/ApiPageBuilder.js.map +1 -1
  25. package/apps/api/createApiPulumiApp.d.ts +24 -24
  26. package/apps/api/createApiPulumiApp.js +2 -2
  27. package/apps/api/createApiPulumiApp.js.map +1 -1
  28. package/apps/awsUtils.js +2 -4
  29. package/apps/awsUtils.js.map +1 -1
  30. package/apps/core/CoreCognito.d.ts +2 -3
  31. package/apps/core/CoreCognito.js +2 -4
  32. package/apps/core/CoreCognito.js.map +1 -1
  33. package/apps/core/CoreDynamo.d.ts +1 -2
  34. package/apps/core/CoreDynamo.js +2 -4
  35. package/apps/core/CoreDynamo.js.map +1 -1
  36. package/apps/core/CoreElasticSearch.d.ts +7 -7
  37. package/apps/core/CoreElasticSearch.js +3 -5
  38. package/apps/core/CoreElasticSearch.js.map +1 -1
  39. package/apps/core/CoreEventBus.d.ts +1 -2
  40. package/apps/core/CoreEventBus.js +2 -4
  41. package/apps/core/CoreEventBus.js.map +1 -1
  42. package/apps/core/CoreFileManager.d.ts +2 -3
  43. package/apps/core/CoreFileManager.js +2 -4
  44. package/apps/core/CoreFileManager.js.map +1 -1
  45. package/apps/core/CoreOpenSearch.d.ts +7 -7
  46. package/apps/core/CoreOpenSearch.js +3 -5
  47. package/apps/core/CoreOpenSearch.js.map +1 -1
  48. package/apps/core/CoreVpc.d.ts +3 -4
  49. package/apps/core/CoreVpc.js +2 -4
  50. package/apps/core/CoreVpc.js.map +1 -1
  51. package/apps/core/createCorePulumiApp.d.ts +15 -15
  52. package/apps/core/createCorePulumiApp.js +3 -7
  53. package/apps/core/createCorePulumiApp.js.map +1 -1
  54. package/apps/createAppBucket.d.ts +5 -5
  55. package/apps/createAppBucket.js +2 -4
  56. package/apps/createAppBucket.js.map +1 -1
  57. package/apps/lambdaUtils.d.ts +1 -1
  58. package/apps/lambdaUtils.js +2 -4
  59. package/apps/lambdaUtils.js.map +1 -1
  60. package/apps/react/createReactPulumiApp.d.ts +5 -5
  61. package/apps/react/createReactPulumiApp.js +33 -10
  62. package/apps/react/createReactPulumiApp.js.map +1 -1
  63. package/apps/tenantRouter.js +6 -12
  64. package/apps/tenantRouter.js.map +1 -1
  65. package/apps/website/WebsitePrerendering.d.ts +17 -18
  66. package/apps/website/WebsitePrerendering.js +8 -13
  67. package/apps/website/WebsitePrerendering.js.map +1 -1
  68. package/apps/website/createWebsitePulumiApp.d.ts +27 -27
  69. package/apps/website/createWebsitePulumiApp.js +6 -12
  70. package/apps/website/createWebsitePulumiApp.js.map +1 -1
  71. package/components/tenantRouter/WebsiteTenantRouter.js +3 -5
  72. package/components/tenantRouter/WebsiteTenantRouter.js.map +1 -1
  73. package/package.json +13 -13
  74. package/utils/crawlDirectory.js +2 -4
  75. package/utils/crawlDirectory.js.map +1 -1
  76. package/utils/getPresignedPost.js +1 -1
  77. package/utils/lambdaEnvVariables.d.ts +1 -1
  78. package/utils/lambdaEnvVariables.js +9 -15
  79. package/utils/lambdaEnvVariables.js.map +1 -1
  80. package/utils/tagResources.js +5 -11
  81. package/utils/tagResources.js.map +1 -1
  82. package/utils/uploadFolderToS3.js +3 -8
  83. package/utils/uploadFolderToS3.js.map +1 -1
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
@@ -19,10 +21,6 @@ var _awsUtils = require("../awsUtils");
19
21
 
20
22
  var _CoreVpc = require("./CoreVpc");
21
23
 
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
24
  /**
27
25
  * THIS MODULE IS CURRENTLY NOT USED!!
28
26
  * At the time of writing, Pulumi will NOT generate a unique suffix for the OpenSearch domain name.
@@ -1 +1 @@
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":"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"}
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":"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"}
@@ -1,10 +1,9 @@
1
- import * as aws from "@pulumi/aws";
2
1
  import { PulumiAppModule } from "@webiny/pulumi";
3
2
  export declare type CoreVpc = PulumiAppModule<typeof CoreVpc>;
4
3
  export declare const CoreVpc: import("@webiny/pulumi").PulumiAppModuleDefinition<{
5
- vpc: import("@webiny/pulumi").PulumiAppResource<typeof aws.ec2.Vpc>;
4
+ vpc: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/vpc").Vpc>;
6
5
  subnets: {
7
- public: import("@webiny/pulumi").PulumiAppResource<typeof aws.ec2.Subnet>[];
8
- private: import("@webiny/pulumi").PulumiAppResource<typeof aws.ec2.Subnet>[];
6
+ public: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/subnet").Subnet>[];
7
+ private: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/subnet").Subnet>[];
9
8
  };
10
9
  }, void>;
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -9,10 +11,6 @@ var aws = _interopRequireWildcard(require("@pulumi/aws"));
9
11
 
10
12
  var _pulumi = require("@webiny/pulumi");
11
13
 
12
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
-
14
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
-
16
14
  const CoreVpc = (0, _pulumi.createAppModule)({
17
15
  name: "CoreVpc",
18
16
 
@@ -1 +1 @@
1
- {"version":3,"names":["CoreVpc","createAppModule","name","config","app","vpc","addResource","aws","ec2","Vpc","cidrBlock","publicSubnet","Subnet","vpcId","output","id","tags","Name","availabilityZones","addHandler","getAvailabilityZones","state","privateSubnet1","availabilityZone","apply","zone","names","privateSubnet2","internetGateway","InternetGateway","elasticIpAllocation","Eip","natGateway","NatGateway","allocationId","subnetId","publicSubnetRouteTable","RouteTable","routes","gatewayId","privateSubnetRouteTable","natGatewayId","RouteTableAssociation","routeTableId","subnets","public","private","addOutputs","vpcPublicSubnetIds","map","subNet","vpcPrivateSubnetIds","vpcSecurityGroupIds","defaultSecurityGroupId"],"sources":["CoreVpc.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { createAppModule, PulumiAppModule } from \"@webiny/pulumi\";\n\nexport type CoreVpc = PulumiAppModule<typeof CoreVpc>;\n\nexport const CoreVpc = createAppModule({\n name: \"CoreVpc\",\n config(app) {\n // Create VPC.\n const vpc = app.addResource(aws.ec2.Vpc, {\n name: \"webiny\",\n config: {\n cidrBlock: \"10.0.0.0/16\"\n }\n });\n\n // Create one public and two private subnets.\n const publicSubnet = app.addResource(aws.ec2.Subnet, {\n name: \"public\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.0.0/24\",\n tags: { Name: \"public-subnet\" }\n }\n });\n\n const availabilityZones = app.addHandler(() => {\n return aws.getAvailabilityZones({\n state: \"available\"\n });\n });\n\n const privateSubnet1 = app.addResource(aws.ec2.Subnet, {\n name: \"private-subnet-1\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.1.0/24\",\n availabilityZone: availabilityZones.apply(zone => zone.names[0]),\n tags: { Name: \"private-subnet-1\" }\n }\n });\n\n const privateSubnet2 = app.addResource(aws.ec2.Subnet, {\n name: \"private-subnet-2\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.2.0/24\",\n availabilityZone: availabilityZones.apply(zone => zone.names[1]),\n tags: { Name: \"private-subnet-2\" }\n }\n });\n\n // Create Internet gateway.\n const internetGateway = app.addResource(aws.ec2.InternetGateway, {\n name: \"internet-gateway\",\n config: {\n vpcId: vpc.output.id\n }\n });\n\n // Create NAT gateway.\n const elasticIpAllocation = app.addResource(aws.ec2.Eip, {\n name: \"nat-gateway-elastic-ip\",\n config: {\n vpc: true\n }\n });\n\n const natGateway = app.addResource(aws.ec2.NatGateway, {\n name: \"nat-gateway\",\n config: {\n allocationId: elasticIpAllocation.output.id,\n subnetId: publicSubnet.output.id\n }\n });\n\n // Create a route table for both subnets.\n const publicSubnetRouteTable = app.addResource(aws.ec2.RouteTable, {\n name: \"public\",\n config: {\n vpcId: vpc.output.id,\n routes: [\n {\n cidrBlock: \"0.0.0.0/0\",\n gatewayId: internetGateway.output.id\n }\n ]\n }\n });\n\n const privateSubnetRouteTable = app.addResource(aws.ec2.RouteTable, {\n name: \"private\",\n config: {\n vpcId: vpc.output.id,\n routes: [\n {\n cidrBlock: \"0.0.0.0/0\",\n natGatewayId: natGateway.output.id\n }\n ]\n }\n });\n\n // Create route table associations - links between subnets and route tables.\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"public-subnet-route-table-association\",\n config: {\n subnetId: publicSubnet.output.id,\n routeTableId: publicSubnetRouteTable.output.id\n }\n });\n\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"private-subnet-1-route-table-association\",\n config: {\n subnetId: privateSubnet1.output.id,\n routeTableId: privateSubnetRouteTable.output.id\n }\n });\n\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"private-subnet-2-route-table-association\",\n config: {\n subnetId: privateSubnet2.output.id,\n routeTableId: privateSubnetRouteTable.output.id\n }\n });\n\n const subnets = {\n public: [publicSubnet],\n private: [privateSubnet1, privateSubnet2]\n };\n\n app.addOutputs({\n vpcPublicSubnetIds: subnets.public.map(subNet => subNet.output.id),\n vpcPrivateSubnetIds: subnets.private.map(subNet => subNet.output.id),\n vpcSecurityGroupIds: [vpc.output.defaultSecurityGroupId]\n });\n\n return {\n vpc,\n subnets\n };\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["CoreVpc","createAppModule","name","config","app","vpc","addResource","aws","ec2","Vpc","cidrBlock","publicSubnet","Subnet","vpcId","output","id","tags","Name","availabilityZones","addHandler","getAvailabilityZones","state","privateSubnet1","availabilityZone","apply","zone","names","privateSubnet2","internetGateway","InternetGateway","elasticIpAllocation","Eip","natGateway","NatGateway","allocationId","subnetId","publicSubnetRouteTable","RouteTable","routes","gatewayId","privateSubnetRouteTable","natGatewayId","RouteTableAssociation","routeTableId","subnets","public","private","addOutputs","vpcPublicSubnetIds","map","subNet","vpcPrivateSubnetIds","vpcSecurityGroupIds","defaultSecurityGroupId"],"sources":["CoreVpc.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { createAppModule, PulumiAppModule } from \"@webiny/pulumi\";\n\nexport type CoreVpc = PulumiAppModule<typeof CoreVpc>;\n\nexport const CoreVpc = createAppModule({\n name: \"CoreVpc\",\n config(app) {\n // Create VPC.\n const vpc = app.addResource(aws.ec2.Vpc, {\n name: \"webiny\",\n config: {\n cidrBlock: \"10.0.0.0/16\"\n }\n });\n\n // Create one public and two private subnets.\n const publicSubnet = app.addResource(aws.ec2.Subnet, {\n name: \"public\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.0.0/24\",\n tags: { Name: \"public-subnet\" }\n }\n });\n\n const availabilityZones = app.addHandler(() => {\n return aws.getAvailabilityZones({\n state: \"available\"\n });\n });\n\n const privateSubnet1 = app.addResource(aws.ec2.Subnet, {\n name: \"private-subnet-1\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.1.0/24\",\n availabilityZone: availabilityZones.apply(zone => zone.names[0]),\n tags: { Name: \"private-subnet-1\" }\n }\n });\n\n const privateSubnet2 = app.addResource(aws.ec2.Subnet, {\n name: \"private-subnet-2\",\n config: {\n vpcId: vpc.output.id,\n cidrBlock: \"10.0.2.0/24\",\n availabilityZone: availabilityZones.apply(zone => zone.names[1]),\n tags: { Name: \"private-subnet-2\" }\n }\n });\n\n // Create Internet gateway.\n const internetGateway = app.addResource(aws.ec2.InternetGateway, {\n name: \"internet-gateway\",\n config: {\n vpcId: vpc.output.id\n }\n });\n\n // Create NAT gateway.\n const elasticIpAllocation = app.addResource(aws.ec2.Eip, {\n name: \"nat-gateway-elastic-ip\",\n config: {\n vpc: true\n }\n });\n\n const natGateway = app.addResource(aws.ec2.NatGateway, {\n name: \"nat-gateway\",\n config: {\n allocationId: elasticIpAllocation.output.id,\n subnetId: publicSubnet.output.id\n }\n });\n\n // Create a route table for both subnets.\n const publicSubnetRouteTable = app.addResource(aws.ec2.RouteTable, {\n name: \"public\",\n config: {\n vpcId: vpc.output.id,\n routes: [\n {\n cidrBlock: \"0.0.0.0/0\",\n gatewayId: internetGateway.output.id\n }\n ]\n }\n });\n\n const privateSubnetRouteTable = app.addResource(aws.ec2.RouteTable, {\n name: \"private\",\n config: {\n vpcId: vpc.output.id,\n routes: [\n {\n cidrBlock: \"0.0.0.0/0\",\n natGatewayId: natGateway.output.id\n }\n ]\n }\n });\n\n // Create route table associations - links between subnets and route tables.\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"public-subnet-route-table-association\",\n config: {\n subnetId: publicSubnet.output.id,\n routeTableId: publicSubnetRouteTable.output.id\n }\n });\n\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"private-subnet-1-route-table-association\",\n config: {\n subnetId: privateSubnet1.output.id,\n routeTableId: privateSubnetRouteTable.output.id\n }\n });\n\n app.addResource(aws.ec2.RouteTableAssociation, {\n name: \"private-subnet-2-route-table-association\",\n config: {\n subnetId: privateSubnet2.output.id,\n routeTableId: privateSubnetRouteTable.output.id\n }\n });\n\n const subnets = {\n public: [publicSubnet],\n private: [privateSubnet1, privateSubnet2]\n };\n\n app.addOutputs({\n vpcPublicSubnetIds: subnets.public.map(subNet => subNet.output.id),\n vpcPrivateSubnetIds: subnets.private.map(subNet => subNet.output.id),\n vpcSecurityGroupIds: [vpc.output.defaultSecurityGroupId]\n });\n\n return {\n vpc,\n subnets\n };\n }\n});\n"],"mappings":"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"}
@@ -34,27 +34,27 @@ export interface CoreAppLegacyConfig {
34
34
  useEmailAsUsername?: boolean;
35
35
  }
36
36
  export declare function createCorePulumiApp(projectAppParams?: CreateCorePulumiAppParams): import("@webiny/pulumi").PulumiApp<{
37
- fileManagerBucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3").Bucket>;
38
- eventBus: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudwatch").EventBus>;
37
+ fileManagerBucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucket").Bucket>;
38
+ eventBus: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudwatch/eventBus").EventBus>;
39
39
  elasticSearch: {
40
- domain: import("@webiny/pulumi").PulumiAppResource<import("@webiny/pulumi").PulumiAppResourceConstructor<import("@pulumi/aws/elasticsearch").Domain, any>> | import("@webiny/pulumi").PulumiAppRemoteResource<import("@pulumi/aws/elasticsearch").GetDomainResult>;
41
- domainPolicy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/elasticsearch").DomainPolicy> | undefined;
42
- table: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb").Table>;
40
+ domain: import("@webiny/pulumi").PulumiAppResource<import("@webiny/pulumi").PulumiAppResourceConstructor<import("@pulumi/aws/elasticsearch/domain").Domain, any>> | import("@webiny/pulumi").PulumiAppRemoteResource<import("@pulumi/aws/elasticsearch").GetDomainResult>;
41
+ domainPolicy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/elasticsearch/domainPolicy").DomainPolicy> | undefined;
42
+ table: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb/table").Table>;
43
43
  dynamoToElastic: {
44
- role: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam").Role>;
45
- policy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam").Policy>;
46
- lambda: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda").Function>;
47
- eventSourceMapping: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda").EventSourceMapping>;
44
+ role: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/role").Role>;
45
+ policy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/policy").Policy>;
46
+ lambda: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda/function").Function>;
47
+ eventSourceMapping: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda/eventSourceMapping").EventSourceMapping>;
48
48
  };
49
49
  } | null;
50
- userPool: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cognito").UserPool>;
51
- userPoolClient: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cognito").UserPoolClient>;
52
- dynamoDbTable: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb").Table>;
50
+ userPool: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cognito/userPool").UserPool>;
51
+ userPoolClient: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cognito/userPoolClient").UserPoolClient>;
52
+ dynamoDbTable: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb/table").Table>;
53
53
  vpc: {
54
- vpc: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2").Vpc>;
54
+ vpc: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/vpc").Vpc>;
55
55
  subnets: {
56
- public: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2").Subnet>[];
57
- private: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2").Subnet>[];
56
+ public: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/subnet").Subnet>[];
57
+ private: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/ec2/subnet").Subnet>[];
58
58
  };
59
59
  } | null;
60
60
  }>;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createCorePulumiApp = createCorePulumiApp;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _pulumi = require("@webiny/pulumi");
13
13
 
@@ -25,10 +25,6 @@ var _CoreVpc = require("./CoreVpc");
25
25
 
26
26
  var _utils = require("../../utils");
27
27
 
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
-
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
-
32
28
  function createCorePulumiApp(projectAppParams = {}) {
33
29
  return (0, _pulumi.createPulumiApp)({
34
30
  name: "core",
@@ -95,7 +91,7 @@ function createCorePulumiApp(projectAppParams = {}) {
95
91
  WbyProjectName: String(process.env["WEBINY_PROJECT_NAME"]),
96
92
  WbyEnvironment: String(process.env["WEBINY_ENV"])
97
93
  });
98
- return _objectSpread(_objectSpread({
94
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({
99
95
  dynamoDbTable,
100
96
  vpc
101
97
  }, cognito), {}, {
@@ -1 +1 @@
1
- {"version":3,"names":["createCorePulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","pulumiResourceNamePrefix","getParam","onResource","resource","startsWith","pulumi","addHandler","prod","params","run","env","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","elasticSearch","ElasticSearch","addOutputs","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusArn","tagResources","WbyProjectName","String","process","WbyEnvironment"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import { createPulumiApp, PulumiAppParam } from \"@webiny/pulumi\";\nimport { CoreCognito } from \"./CoreCognito\";\nimport { CoreDynamo } from \"./CoreDynamo\";\nimport { ElasticSearch } from \"./CoreElasticSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { tagResources } from \"~/utils\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface CreateCorePulumiAppParams {\n /**\n * Secures against deleting database by accident.\n * By default enabled in production environments.\n */\n protect?: PulumiAppParam<boolean>;\n\n /**\n * Enables ElasticSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n elasticSearch?: PulumiAppParam<boolean>;\n\n /**\n * Enables VPC for the application.\n * By default enabled in production environments.\n */\n vpc?: PulumiAppParam<boolean>;\n\n /**\n * Additional settings for backwards compatibility.\n */\n legacy?: PulumiAppParam<CoreAppLegacyConfig>;\n\n /**\n * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)\n * or add additional ones into the mix.\n */\n pulumi?: (app: CorePulumiApp) => void | Promise<void>;\n\n /**\n * Prefixes names of all Pulumi cloud infrastructure resource with given prefix.\n */\n pulumiResourceNamePrefix?: PulumiAppParam<string>;\n}\n\nexport interface CoreAppLegacyConfig {\n useEmailAsUsername?: boolean;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n return createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\n if (pulumiResourceNamePrefix) {\n app.onResource(resource => {\n if (!resource.name.startsWith(pulumiResourceNamePrefix)) {\n resource.name = `${pulumiResourceNamePrefix}${resource.name}`;\n }\n });\n }\n\n // Overrides must be applied via a handler, registered at the very start of the program.\n // By doing this, we're ensuring user's adjustments are not applied to late.\n if (projectAppParams.pulumi) {\n app.addHandler(() => {\n return projectAppParams.pulumi!(app as CorePulumiApp);\n });\n }\n\n const prod = app.params.run.env === \"prod\";\n const protect = app.getParam(projectAppParams.protect) ?? prod;\n const legacyConfig = app.getParam(projectAppParams.legacy) || {};\n\n // Setup DynamoDB table\n const dynamoDbTable = app.addModule(CoreDynamo, { protect });\n\n // Setup VPC\n const vpcEnabled = app.getParam(projectAppParams?.vpc) ?? prod;\n const vpc = vpcEnabled ? app.addModule(CoreVpc) : null;\n\n // Setup Cognito\n const cognito = app.addModule(CoreCognito, {\n protect,\n useEmailAsUsername: legacyConfig.useEmailAsUsername ?? false\n });\n\n // Setup event bus\n const eventBus = app.addModule(CoreEventBus);\n\n // Setup file core bucket\n const { bucket: fileManagerBucket } = app.addModule(CoreFileManger, { protect });\n\n const elasticSearch = app.getParam(projectAppParams?.elasticSearch)\n ? app.addModule(ElasticSearch, { protect })\n : null;\n\n app.addOutputs({\n fileManagerBucketId: fileManagerBucket.output.id,\n primaryDynamodbTableArn: dynamoDbTable.output.arn,\n primaryDynamodbTableName: dynamoDbTable.output.name,\n primaryDynamodbTableHashKey: dynamoDbTable.output.hashKey,\n primaryDynamodbTableRangeKey: dynamoDbTable.output.rangeKey,\n cognitoUserPoolId: cognito.userPool.output.id,\n cognitoUserPoolArn: cognito.userPool.output.arn,\n cognitoUserPoolPasswordPolicy: cognito.userPool.output.passwordPolicy,\n cognitoAppClientId: cognito.userPoolClient.output.id,\n eventBusArn: eventBus.output.arn\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n return {\n dynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["createCorePulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","pulumiResourceNamePrefix","getParam","onResource","resource","startsWith","pulumi","addHandler","prod","params","run","env","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","elasticSearch","ElasticSearch","addOutputs","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusArn","tagResources","WbyProjectName","String","process","WbyEnvironment"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import { createPulumiApp, PulumiAppParam } from \"@webiny/pulumi\";\nimport { CoreCognito } from \"./CoreCognito\";\nimport { CoreDynamo } from \"./CoreDynamo\";\nimport { ElasticSearch } from \"./CoreElasticSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { tagResources } from \"~/utils\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface CreateCorePulumiAppParams {\n /**\n * Secures against deleting database by accident.\n * By default enabled in production environments.\n */\n protect?: PulumiAppParam<boolean>;\n\n /**\n * Enables ElasticSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n elasticSearch?: PulumiAppParam<boolean>;\n\n /**\n * Enables VPC for the application.\n * By default enabled in production environments.\n */\n vpc?: PulumiAppParam<boolean>;\n\n /**\n * Additional settings for backwards compatibility.\n */\n legacy?: PulumiAppParam<CoreAppLegacyConfig>;\n\n /**\n * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)\n * or add additional ones into the mix.\n */\n pulumi?: (app: CorePulumiApp) => void | Promise<void>;\n\n /**\n * Prefixes names of all Pulumi cloud infrastructure resource with given prefix.\n */\n pulumiResourceNamePrefix?: PulumiAppParam<string>;\n}\n\nexport interface CoreAppLegacyConfig {\n useEmailAsUsername?: boolean;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n return createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\n if (pulumiResourceNamePrefix) {\n app.onResource(resource => {\n if (!resource.name.startsWith(pulumiResourceNamePrefix)) {\n resource.name = `${pulumiResourceNamePrefix}${resource.name}`;\n }\n });\n }\n\n // Overrides must be applied via a handler, registered at the very start of the program.\n // By doing this, we're ensuring user's adjustments are not applied to late.\n if (projectAppParams.pulumi) {\n app.addHandler(() => {\n return projectAppParams.pulumi!(app as CorePulumiApp);\n });\n }\n\n const prod = app.params.run.env === \"prod\";\n const protect = app.getParam(projectAppParams.protect) ?? prod;\n const legacyConfig = app.getParam(projectAppParams.legacy) || {};\n\n // Setup DynamoDB table\n const dynamoDbTable = app.addModule(CoreDynamo, { protect });\n\n // Setup VPC\n const vpcEnabled = app.getParam(projectAppParams?.vpc) ?? prod;\n const vpc = vpcEnabled ? app.addModule(CoreVpc) : null;\n\n // Setup Cognito\n const cognito = app.addModule(CoreCognito, {\n protect,\n useEmailAsUsername: legacyConfig.useEmailAsUsername ?? false\n });\n\n // Setup event bus\n const eventBus = app.addModule(CoreEventBus);\n\n // Setup file core bucket\n const { bucket: fileManagerBucket } = app.addModule(CoreFileManger, { protect });\n\n const elasticSearch = app.getParam(projectAppParams?.elasticSearch)\n ? app.addModule(ElasticSearch, { protect })\n : null;\n\n app.addOutputs({\n fileManagerBucketId: fileManagerBucket.output.id,\n primaryDynamodbTableArn: dynamoDbTable.output.arn,\n primaryDynamodbTableName: dynamoDbTable.output.name,\n primaryDynamodbTableHashKey: dynamoDbTable.output.hashKey,\n primaryDynamodbTableRangeKey: dynamoDbTable.output.rangeKey,\n cognitoUserPoolId: cognito.userPool.output.id,\n cognitoUserPoolArn: cognito.userPool.output.arn,\n cognitoUserPoolPasswordPolicy: cognito.userPool.output.passwordPolicy,\n cognitoAppClientId: cognito.userPoolClient.output.id,\n eventBusArn: eventBus.output.arn\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n return {\n dynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n}\n"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import * as aws from "@pulumi/aws";
2
2
  import { PulumiApp } from "@webiny/pulumi";
3
3
  export declare function createPublicAppBucket(app: PulumiApp, name: string): {
4
- bucket: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.Bucket>;
4
+ bucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucket").Bucket>;
5
5
  origin: aws.types.input.cloudfront.DistributionOrigin;
6
6
  };
7
7
  export declare function createPrivateAppBucket(app: PulumiApp, name: string): {
8
- bucket: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.Bucket>;
9
- originIdentity: import("@webiny/pulumi").PulumiAppResource<typeof aws.cloudfront.OriginAccessIdentity>;
8
+ bucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucket").Bucket>;
9
+ originIdentity: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudfront/originAccessIdentity").OriginAccessIdentity>;
10
10
  origin: aws.types.input.cloudfront.DistributionOrigin;
11
- bucketPublicAccessBlock: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.BucketPublicAccessBlock>;
12
- bucketPolicy: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.BucketPolicy>;
11
+ bucketPublicAccessBlock: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucketPublicAccessBlock").BucketPublicAccessBlock>;
12
+ bucketPolicy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucketPolicy").BucketPolicy>;
13
13
  };
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -8,10 +10,6 @@ exports.createPublicAppBucket = createPublicAppBucket;
8
10
 
9
11
  var aws = _interopRequireWildcard(require("@pulumi/aws"));
10
12
 
11
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
-
13
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
-
15
13
  function createPublicAppBucket(app, name) {
16
14
  const bucket = app.addResource(aws.s3.Bucket, {
17
15
  name: name,
@@ -1 +1 @@
1
- {"version":3,"names":["createPublicAppBucket","app","name","bucket","addResource","aws","s3","Bucket","config","acl","CannedAcl","PublicRead","forceDestroy","website","indexDocument","errorDocument","origin","originId","output","arn","domainName","websiteEndpoint","customOriginConfig","originProtocolPolicy","httpPort","httpsPort","originSslProtocols","createPrivateAppBucket","Private","originIdentity","cloudfront","OriginAccessIdentity","apply","String","process","env","AWS_REGION","s3OriginConfig","originAccessIdentity","cloudfrontAccessIdentityPath","bucketPublicAccessBlock","BucketPublicAccessBlock","id","blockPublicAcls","blockPublicPolicy","ignorePublicAcls","restrictPublicBuckets","bucketPolicy","BucketPolicy","policy","Version","Statement","statements","Effect","Principal","AWS","iamArn","Action","Resource"],"sources":["createAppBucket.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi\";\n\nexport function createPublicAppBucket(app: PulumiApp, name: string) {\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.PublicRead,\n forceDestroy: true,\n website: {\n indexDocument: \"index.html\",\n errorDocument: \"_NOT_FOUND_PAGE_/index.html\"\n }\n }\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.websiteEndpoint,\n customOriginConfig: {\n originProtocolPolicy: \"http-only\",\n httpPort: 80,\n httpsPort: 443,\n originSslProtocols: [\"TLSv1.2\"]\n }\n };\n\n return {\n bucket,\n origin\n };\n}\n\n// Forces S3 buckets to be available only through a cloudfront distribution.\nexport function createPrivateAppBucket(app: PulumiApp, name: string) {\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.Private,\n forceDestroy: true\n }\n });\n\n // Origin Identity is a kind of AWS user that represents Cloudfront distribution\n // We can add IAM policies to it later, to allow accessing private S3 bucket\n const originIdentity = app.addResource(aws.cloudfront.OriginAccessIdentity, {\n name: `${name}-origin-identity`,\n config: {}\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.bucket.apply(\n // We need to create a regional domain name. Otherwise, we'll run into the following issue:\n // https://aws.amazon.com/premiumsupport/knowledge-center/s3-http-307-response/\n name => `${name}.s3.${String(process.env.AWS_REGION)}.amazonaws.com`\n ),\n s3OriginConfig: {\n originAccessIdentity: originIdentity.output.cloudfrontAccessIdentityPath\n }\n };\n\n // block any public access\n const bucketPublicAccessBlock = app.addResource(aws.s3.BucketPublicAccessBlock, {\n name: `${name}-bucket-block-access`,\n config: {\n bucket: bucket.output.id,\n blockPublicAcls: true,\n blockPublicPolicy: true,\n ignorePublicAcls: true,\n restrictPublicBuckets: true\n }\n });\n\n // Create an IAM policy to allow access to S3 bucket from cloudfront\n const bucketPolicy = app.addResource(aws.s3.BucketPolicy, {\n name: `${name}-bucket-policy`,\n config: {\n bucket: bucket.output.bucket,\n policy: {\n Version: \"2012-10-17\",\n Statement: bucket.output.arn.apply(arn => {\n const statements: aws.iam.PolicyStatement[] = [\n {\n Effect: \"Allow\",\n Principal: { AWS: originIdentity.output.iamArn },\n // we need GetObject to retrieve objects from S3\n // and ListBucket allows to properly handle non-existing files (404)\n Action: [\"s3:ListBucket\", \"s3:GetObject\"],\n Resource: [`${arn}`, `${arn}/*`]\n }\n ];\n\n return statements;\n })\n }\n }\n });\n\n return {\n bucket,\n originIdentity,\n origin,\n bucketPublicAccessBlock,\n bucketPolicy\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["createPublicAppBucket","app","name","bucket","addResource","aws","s3","Bucket","config","acl","CannedAcl","PublicRead","forceDestroy","website","indexDocument","errorDocument","origin","originId","output","arn","domainName","websiteEndpoint","customOriginConfig","originProtocolPolicy","httpPort","httpsPort","originSslProtocols","createPrivateAppBucket","Private","originIdentity","cloudfront","OriginAccessIdentity","apply","String","process","env","AWS_REGION","s3OriginConfig","originAccessIdentity","cloudfrontAccessIdentityPath","bucketPublicAccessBlock","BucketPublicAccessBlock","id","blockPublicAcls","blockPublicPolicy","ignorePublicAcls","restrictPublicBuckets","bucketPolicy","BucketPolicy","policy","Version","Statement","statements","Effect","Principal","AWS","iamArn","Action","Resource"],"sources":["createAppBucket.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi\";\n\nexport function createPublicAppBucket(app: PulumiApp, name: string) {\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.PublicRead,\n forceDestroy: true,\n website: {\n indexDocument: \"index.html\",\n errorDocument: \"_NOT_FOUND_PAGE_/index.html\"\n }\n }\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.websiteEndpoint,\n customOriginConfig: {\n originProtocolPolicy: \"http-only\",\n httpPort: 80,\n httpsPort: 443,\n originSslProtocols: [\"TLSv1.2\"]\n }\n };\n\n return {\n bucket,\n origin\n };\n}\n\n// Forces S3 buckets to be available only through a cloudfront distribution.\nexport function createPrivateAppBucket(app: PulumiApp, name: string) {\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.Private,\n forceDestroy: true\n }\n });\n\n // Origin Identity is a kind of AWS user that represents Cloudfront distribution\n // We can add IAM policies to it later, to allow accessing private S3 bucket\n const originIdentity = app.addResource(aws.cloudfront.OriginAccessIdentity, {\n name: `${name}-origin-identity`,\n config: {}\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.bucket.apply(\n // We need to create a regional domain name. Otherwise, we'll run into the following issue:\n // https://aws.amazon.com/premiumsupport/knowledge-center/s3-http-307-response/\n name => `${name}.s3.${String(process.env.AWS_REGION)}.amazonaws.com`\n ),\n s3OriginConfig: {\n originAccessIdentity: originIdentity.output.cloudfrontAccessIdentityPath\n }\n };\n\n // block any public access\n const bucketPublicAccessBlock = app.addResource(aws.s3.BucketPublicAccessBlock, {\n name: `${name}-bucket-block-access`,\n config: {\n bucket: bucket.output.id,\n blockPublicAcls: true,\n blockPublicPolicy: true,\n ignorePublicAcls: true,\n restrictPublicBuckets: true\n }\n });\n\n // Create an IAM policy to allow access to S3 bucket from cloudfront\n const bucketPolicy = app.addResource(aws.s3.BucketPolicy, {\n name: `${name}-bucket-policy`,\n config: {\n bucket: bucket.output.bucket,\n policy: {\n Version: \"2012-10-17\",\n Statement: bucket.output.arn.apply(arn => {\n const statements: aws.iam.PolicyStatement[] = [\n {\n Effect: \"Allow\",\n Principal: { AWS: originIdentity.output.iamArn },\n // we need GetObject to retrieve objects from S3\n // and ListBucket allows to properly handle non-existing files (404)\n Action: [\"s3:ListBucket\", \"s3:GetObject\"],\n Resource: [`${arn}`, `${arn}/*`]\n }\n ];\n\n return statements;\n })\n }\n }\n });\n\n return {\n bucket,\n originIdentity,\n origin,\n bucketPublicAccessBlock,\n bucketPolicy\n };\n}\n"],"mappings":"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"}
@@ -7,4 +7,4 @@ interface LambdaRoleParams {
7
7
  policy?: pulumi.Output<aws.iam.Policy>;
8
8
  executionRole?: pulumi.Input<string>;
9
9
  }
10
- export declare function createLambdaRole(app: PulumiApp, params: LambdaRoleParams): import("@webiny/pulumi").PulumiAppResource<typeof aws.iam.Role>;
10
+ export declare function createLambdaRole(app: PulumiApp, params: LambdaRoleParams): import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/role").Role>;
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -26,10 +28,6 @@ Object.keys(_lambdaEnvVariables).forEach(function (key) {
26
28
 
27
29
  var _common = require("./common");
28
30
 
29
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
30
-
31
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
32
-
33
31
  function createLambdaRole(app, params) {
34
32
  const role = app.addResource(aws.iam.Role, {
35
33
  name: params.name,
@@ -1 +1 @@
1
- {"version":3,"names":["createLambdaRole","app","params","role","addResource","aws","iam","Role","name","config","assumeRolePolicy","Version","Statement","Action","Principal","Service","Effect","policy","RolePolicyAttachment","output","policyArn","arn","executionRole","vpc","getModule","VpcConfig","enabled","apply","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","AWSLambdaBasicExecutionRole"],"sources":["lambdaUtils.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi\";\nexport * from \"../utils/lambdaEnvVariables\";\n\nimport { VpcConfig } from \"./common\";\n\ninterface LambdaRoleParams {\n name: string;\n policy?: pulumi.Output<aws.iam.Policy>;\n executionRole?: pulumi.Input<string>;\n}\n\nexport function createLambdaRole(app: PulumiApp, params: LambdaRoleParams) {\n const role = app.addResource(aws.iam.Role, {\n name: params.name,\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 if (params.policy) {\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-policy`,\n config: {\n role: role.output,\n policyArn: params.policy.arn\n }\n });\n }\n\n if (params.executionRole) {\n // If execution role is set, use it.\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-execution-role`,\n config: {\n role: role.output,\n policyArn: params.executionRole\n }\n });\n }\n\n // Add default execution role.\n const vpc = app.getModule(VpcConfig);\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-default-execution-role`,\n config: {\n role: role.output,\n policyArn: vpc.enabled.apply(enabled =>\n enabled\n ? aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n : aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\n )\n }\n });\n\n return role;\n}\n"],"mappings":";;;;;;;;;;AACA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;;;;;AAQO,SAASA,gBAAT,CAA0BC,GAA1B,EAA0CC,MAA1C,EAAoE;EACvE,MAAMC,IAAI,GAAGF,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQC,IAAxB,EAA8B;IACvCC,IAAI,EAAEN,MAAM,CAACM,IAD0B;IAEvCC,MAAM,EAAE;MACJC,gBAAgB,EAAE;QACdC,OAAO,EAAE,YADK;QAEdC,SAAS,EAAE,CACP;UACIC,MAAM,EAAE,gBADZ;UAEIC,SAAS,EAAE;YACPC,OAAO,EAAE;UADF,CAFf;UAKIC,MAAM,EAAE;QALZ,CADO;MAFG;IADd;EAF+B,CAA9B,CAAb;;EAkBA,IAAId,MAAM,CAACe,MAAX,EAAmB;IACfhB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;MAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,SADqB;MAE1CC,MAAM,EAAE;QACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;QAEJC,SAAS,EAAElB,MAAM,CAACe,MAAP,CAAcI;MAFrB;IAFkC,CAA9C;EAOH;;EAED,IAAInB,MAAM,CAACoB,aAAX,EAA0B;IACtB;IACArB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;MAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,iBADqB;MAE1CC,MAAM,EAAE;QACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;QAEJC,SAAS,EAAElB,MAAM,CAACoB;MAFd;IAFkC,CAA9C;EAOH,CAtCsE,CAwCvE;;;EACA,MAAMC,GAAG,GAAGtB,GAAG,CAACuB,SAAJ,CAAcC,iBAAd,CAAZ;EAEAxB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;IAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,yBADqB;IAE1CC,MAAM,EAAE;MACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;MAEJC,SAAS,EAAEG,GAAG,CAACG,OAAJ,CAAYC,KAAZ,CAAkBD,OAAO,IAChCA,OAAO,GACDrB,GAAG,CAACC,GAAJ,CAAQsB,aAAR,CAAsBC,+BADrB,GAEDxB,GAAG,CAACC,GAAJ,CAAQsB,aAAR,CAAsBE,2BAHrB;IAFP;EAFkC,CAA9C;EAYA,OAAO3B,IAAP;AACH"}
1
+ {"version":3,"names":["createLambdaRole","app","params","role","addResource","aws","iam","Role","name","config","assumeRolePolicy","Version","Statement","Action","Principal","Service","Effect","policy","RolePolicyAttachment","output","policyArn","arn","executionRole","vpc","getModule","VpcConfig","enabled","apply","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","AWSLambdaBasicExecutionRole"],"sources":["lambdaUtils.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi\";\nexport * from \"../utils/lambdaEnvVariables\";\n\nimport { VpcConfig } from \"./common\";\n\ninterface LambdaRoleParams {\n name: string;\n policy?: pulumi.Output<aws.iam.Policy>;\n executionRole?: pulumi.Input<string>;\n}\n\nexport function createLambdaRole(app: PulumiApp, params: LambdaRoleParams) {\n const role = app.addResource(aws.iam.Role, {\n name: params.name,\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 if (params.policy) {\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-policy`,\n config: {\n role: role.output,\n policyArn: params.policy.arn\n }\n });\n }\n\n if (params.executionRole) {\n // If execution role is set, use it.\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-execution-role`,\n config: {\n role: role.output,\n policyArn: params.executionRole\n }\n });\n }\n\n // Add default execution role.\n const vpc = app.getModule(VpcConfig);\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-default-execution-role`,\n config: {\n role: role.output,\n policyArn: vpc.enabled.apply(enabled =>\n enabled\n ? aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n : aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\n )\n }\n });\n\n return role;\n}\n"],"mappings":";;;;;;;;;;;;AACA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAQO,SAASA,gBAAT,CAA0BC,GAA1B,EAA0CC,MAA1C,EAAoE;EACvE,MAAMC,IAAI,GAAGF,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQC,IAAxB,EAA8B;IACvCC,IAAI,EAAEN,MAAM,CAACM,IAD0B;IAEvCC,MAAM,EAAE;MACJC,gBAAgB,EAAE;QACdC,OAAO,EAAE,YADK;QAEdC,SAAS,EAAE,CACP;UACIC,MAAM,EAAE,gBADZ;UAEIC,SAAS,EAAE;YACPC,OAAO,EAAE;UADF,CAFf;UAKIC,MAAM,EAAE;QALZ,CADO;MAFG;IADd;EAF+B,CAA9B,CAAb;;EAkBA,IAAId,MAAM,CAACe,MAAX,EAAmB;IACfhB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;MAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,SADqB;MAE1CC,MAAM,EAAE;QACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;QAEJC,SAAS,EAAElB,MAAM,CAACe,MAAP,CAAcI;MAFrB;IAFkC,CAA9C;EAOH;;EAED,IAAInB,MAAM,CAACoB,aAAX,EAA0B;IACtB;IACArB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;MAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,iBADqB;MAE1CC,MAAM,EAAE;QACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;QAEJC,SAAS,EAAElB,MAAM,CAACoB;MAFd;IAFkC,CAA9C;EAOH,CAtCsE,CAwCvE;;;EACA,MAAMC,GAAG,GAAGtB,GAAG,CAACuB,SAAJ,CAAcC,iBAAd,CAAZ;EAEAxB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQY,oBAAxB,EAA8C;IAC1CV,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,yBADqB;IAE1CC,MAAM,EAAE;MACJN,IAAI,EAAEA,IAAI,CAACgB,MADP;MAEJC,SAAS,EAAEG,GAAG,CAACG,OAAJ,CAAYC,KAAZ,CAAkBD,OAAO,IAChCA,OAAO,GACDrB,GAAG,CAACC,GAAJ,CAAQsB,aAAR,CAAsBC,+BADrB,GAEDxB,GAAG,CAACC,GAAJ,CAAQsB,aAAR,CAAsBE,2BAHrB;IAFP;EAFkC,CAA9C;EAYA,OAAO3B,IAAP;AACH"}
@@ -24,10 +24,10 @@ export interface CreateReactPulumiAppParams {
24
24
  pulumiResourceNamePrefix?: PulumiAppParam<string>;
25
25
  }
26
26
  export declare const createReactPulumiApp: (projectAppParams: CreateReactPulumiAppParams) => import("@webiny/pulumi").PulumiApp<{
27
- cloudfront: import("@webiny/pulumi").PulumiAppResource<typeof aws.cloudfront.Distribution>;
28
- bucket: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.Bucket>;
29
- originIdentity: import("@webiny/pulumi").PulumiAppResource<typeof aws.cloudfront.OriginAccessIdentity>;
27
+ cloudfront: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudfront/distribution").Distribution>;
28
+ bucket: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucket").Bucket>;
29
+ originIdentity: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudfront/originAccessIdentity").OriginAccessIdentity>;
30
30
  origin: aws.types.input.cloudfront.DistributionOrigin;
31
- bucketPublicAccessBlock: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.BucketPublicAccessBlock>;
32
- bucketPolicy: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.BucketPolicy>;
31
+ bucketPublicAccessBlock: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucketPublicAccessBlock").BucketPublicAccessBlock>;
32
+ bucketPolicy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/s3/bucketPolicy").BucketPolicy>;
33
33
  }>;
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
10
  exports.createReactPulumiApp = void 0;
9
11
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
13
 
12
14
  var aws = _interopRequireWildcard(require("@pulumi/aws"));
13
15
 
@@ -19,13 +21,9 @@ var _createAppBucket = require("../createAppBucket");
19
21
 
20
22
  var _customDomain = require("../customDomain");
21
23
 
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
24
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
25
25
 
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
-
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
+ var _CoreOutput = require("../common/CoreOutput");
29
27
 
30
28
  const createReactPulumiApp = projectAppParams => {
31
29
  return (0, _pulumi.createPulumiApp)({
@@ -45,7 +43,9 @@ const createReactPulumiApp = projectAppParams => {
45
43
 
46
44
  const {
47
45
  name
48
- } = projectAppParams; // Overrides must be applied via a handler, registered at the very start of the program.
46
+ } = projectAppParams; // Register core output as a module available for all other modules
47
+
48
+ const core = app.addModule(_CoreOutput.CoreOutput); // Overrides must be applied via a handler, registered at the very start of the program.
49
49
  // By doing this, we're ensuring user's adjustments are not applied to late.
50
50
 
51
51
  if (projectAppParams.pulumi) {
@@ -111,7 +111,30 @@ const createReactPulumiApp = projectAppParams => {
111
111
  WbyProjectName: String(process.env["WEBINY_PROJECT_NAME"]),
112
112
  WbyEnvironment: String(process.env["WEBINY_ENV"])
113
113
  });
114
- return _objectSpread(_objectSpread({}, bucket), {}, {
114
+ /**
115
+ * We need to store the appUrl to the admin settings item in the dynamodb
116
+ */
117
+
118
+ app.addResource(aws.dynamodb.TableItem, {
119
+ name: "adminSettings",
120
+ config: {
121
+ tableName: core.primaryDynamodbTableName,
122
+ hashKey: core.primaryDynamodbTableHashKey,
123
+ rangeKey: pulumi.output(core.primaryDynamodbTableRangeKey).apply(key => key || "SK"),
124
+ item: pulumi.interpolate`{
125
+ "PK": {"S": "ADMIN#SETTINGS"},
126
+ "SK": {"S": "${app.params.run.variant || "default"}"},
127
+ "data": {
128
+ "M": {
129
+ "appUrl": {
130
+ "S": "${cloudfront.output.domainName.apply(value => `https://${value}`)}"
131
+ }
132
+ }
133
+ }
134
+ }`
135
+ }
136
+ });
137
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, bucket), {}, {
115
138
  cloudfront
116
139
  });
117
140
  }