@pwrdrvr/microapps-cdk 0.2.7 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.gitattributes CHANGED
@@ -1,20 +1,20 @@
1
1
  # ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
2
2
 
3
- /.eslintrc.json linguist-generated
4
- /.gitattributes linguist-generated
5
- /.github/pull_request_template.md linguist-generated
6
- /.github/workflows/build.yml linguist-generated
7
- /.github/workflows/pull-request-lint.yml linguist-generated
8
- /.github/workflows/release.yml linguist-generated
9
- /.github/workflows/stale.yml linguist-generated
10
- /.github/workflows/upgrade-main.yml linguist-generated
11
- /.gitignore linguist-generated
12
- /.mergify.yml linguist-generated
13
- /.npmignore linguist-generated
14
- /.projen/** linguist-generated
15
- /.projen/deps.json linguist-generated
16
- /.projen/tasks.json linguist-generated
17
- /LICENSE linguist-generated
18
- /package-lock.json linguist-generated
19
- /package.json linguist-generated
20
- /tsconfig.dev.json linguist-generated
3
+ /.eslintrc.json linguist-generated
4
+ /.gitattributes linguist-generated
5
+ /.github/pull_request_template.md linguist-generated
6
+ /.github/workflows/build.yml linguist-generated
7
+ /.github/workflows/pull-request-lint.yml linguist-generated
8
+ /.github/workflows/release.yml linguist-generated
9
+ /.github/workflows/upgrade-main.yml linguist-generated
10
+ /.gitignore linguist-generated
11
+ /.mergify.yml linguist-generated
12
+ /.npmignore linguist-generated
13
+ /.projen/** linguist-generated
14
+ /.projen/deps.json linguist-generated
15
+ /.projen/files.json linguist-generated
16
+ /.projen/tasks.json linguist-generated
17
+ /LICENSE linguist-generated
18
+ /package.json linguist-generated
19
+ /tsconfig.dev.json linguist-generated
20
+ /yarn.lock linguist-generated
package/.jsii CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "author": {
3
3
  "email": "harold@pwrdrvr.com",
4
- "name": "Harold Hunt",
4
+ "name": "PwrDrvr LLC",
5
+ "organization": true,
5
6
  "roles": [
6
7
  "author"
7
8
  ]
8
9
  },
9
10
  "dependencies": {
10
- "@aws-cdk/aws-apigatewayv2-alpha": "2.8.0-alpha.0",
11
- "aws-cdk-lib": "^2.8.0",
11
+ "@aws-cdk/aws-apigatewayv2-alpha": "^2.24.1-alpha.0",
12
+ "@aws-cdk/aws-apigatewayv2-integrations-alpha": "^2.24.1-alpha.0",
13
+ "aws-cdk-lib": "^2.24.1",
12
14
  "constructs": "^10.0.5"
13
15
  },
14
16
  "dependencyClosure": {
@@ -36,13 +38,44 @@
36
38
  "python": {
37
39
  "classifiers": [
38
40
  "Framework :: AWS CDK",
39
- "Framework :: AWS CDK :: 1"
41
+ "Framework :: AWS CDK :: 2"
40
42
  ],
41
43
  "distName": "aws-cdk.aws-apigatewayv2-alpha",
42
44
  "module": "aws_cdk.aws_apigatewayv2_alpha"
43
45
  }
44
46
  }
45
47
  },
48
+ "@aws-cdk/aws-apigatewayv2-integrations-alpha": {
49
+ "targets": {
50
+ "dotnet": {
51
+ "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png",
52
+ "namespace": "Amazon.CDK.AWS.Apigatewayv2.Integrations.Alpha",
53
+ "packageId": "Amazon.CDK.AWS.APIGatewayv2.Integrations.Alpha"
54
+ },
55
+ "go": {
56
+ "moduleName": "github.com/aws/aws-cdk-go",
57
+ "packageName": "awscdkapigatewayv2integrationsalpha"
58
+ },
59
+ "java": {
60
+ "maven": {
61
+ "artifactId": "apigatewayv2-integrations-alpha",
62
+ "groupId": "software.amazon.awscdk"
63
+ },
64
+ "package": "software.amazon.awscdk.services.apigatewayv2.integrations.alpha"
65
+ },
66
+ "js": {
67
+ "npm": "@aws-cdk/aws-apigatewayv2-integrations-alpha"
68
+ },
69
+ "python": {
70
+ "classifiers": [
71
+ "Framework :: AWS CDK",
72
+ "Framework :: AWS CDK :: 2"
73
+ ],
74
+ "distName": "aws-cdk.aws-apigatewayv2-integrations-alpha",
75
+ "module": "aws_cdk.aws_apigatewayv2_integrations_alpha"
76
+ }
77
+ }
78
+ },
46
79
  "aws-cdk-lib": {
47
80
  "submodules": {
48
81
  "aws-cdk-lib.alexa_ask": {
@@ -409,6 +442,19 @@
409
442
  }
410
443
  }
411
444
  },
445
+ "aws-cdk-lib.aws_billingconductor": {
446
+ "targets": {
447
+ "dotnet": {
448
+ "namespace": "Amazon.CDK.AWS.BillingConductor"
449
+ },
450
+ "java": {
451
+ "package": "software.amazon.awscdk.services.billingconductor"
452
+ },
453
+ "python": {
454
+ "module": "aws_cdk.aws_billingconductor"
455
+ }
456
+ }
457
+ },
412
458
  "aws-cdk-lib.aws_budgets": {
413
459
  "targets": {
414
460
  "dotnet": {
@@ -1216,6 +1262,19 @@
1216
1262
  }
1217
1263
  }
1218
1264
  },
1265
+ "aws-cdk-lib.aws_forecast": {
1266
+ "targets": {
1267
+ "dotnet": {
1268
+ "namespace": "Amazon.CDK.AWS.Forecast"
1269
+ },
1270
+ "java": {
1271
+ "package": "software.amazon.awscdk.services.forecast"
1272
+ },
1273
+ "python": {
1274
+ "module": "aws_cdk.aws_forecast"
1275
+ }
1276
+ }
1277
+ },
1219
1278
  "aws-cdk-lib.aws_frauddetector": {
1220
1279
  "targets": {
1221
1280
  "dotnet": {
@@ -1398,6 +1457,19 @@
1398
1457
  }
1399
1458
  }
1400
1459
  },
1460
+ "aws-cdk-lib.aws_inspectorv2": {
1461
+ "targets": {
1462
+ "dotnet": {
1463
+ "namespace": "Amazon.CDK.AWS.InspectorV2"
1464
+ },
1465
+ "java": {
1466
+ "package": "software.amazon.awscdk.services.inspectorv2"
1467
+ },
1468
+ "python": {
1469
+ "module": "aws_cdk.aws_inspectorv2"
1470
+ }
1471
+ }
1472
+ },
1401
1473
  "aws-cdk-lib.aws_iot": {
1402
1474
  "targets": {
1403
1475
  "dotnet": {
@@ -1502,6 +1574,19 @@
1502
1574
  }
1503
1575
  }
1504
1576
  },
1577
+ "aws-cdk-lib.aws_iottwinmaker": {
1578
+ "targets": {
1579
+ "dotnet": {
1580
+ "namespace": "Amazon.CDK.AWS.IoTTwinMaker"
1581
+ },
1582
+ "java": {
1583
+ "package": "software.amazon.awscdk.services.iottwinmaker"
1584
+ },
1585
+ "python": {
1586
+ "module": "aws_cdk.aws_iottwinmaker"
1587
+ }
1588
+ }
1589
+ },
1505
1590
  "aws-cdk-lib.aws_iotwireless": {
1506
1591
  "targets": {
1507
1592
  "dotnet": {
@@ -1528,6 +1613,19 @@
1528
1613
  }
1529
1614
  }
1530
1615
  },
1616
+ "aws-cdk-lib.aws_kafkaconnect": {
1617
+ "targets": {
1618
+ "dotnet": {
1619
+ "namespace": "Amazon.CDK.AWS.KafkaConnect"
1620
+ },
1621
+ "java": {
1622
+ "package": "software.amazon.awscdk.services.kafkaconnect"
1623
+ },
1624
+ "python": {
1625
+ "module": "aws_cdk.aws_kafkaconnect"
1626
+ }
1627
+ }
1628
+ },
1531
1629
  "aws-cdk-lib.aws_kendra": {
1532
1630
  "targets": {
1533
1631
  "dotnet": {
@@ -1567,6 +1665,19 @@
1567
1665
  }
1568
1666
  }
1569
1667
  },
1668
+ "aws-cdk-lib.aws_kinesisanalyticsv2": {
1669
+ "targets": {
1670
+ "dotnet": {
1671
+ "namespace": "Amazon.CDK.AWS.KinesisAnalyticsV2"
1672
+ },
1673
+ "java": {
1674
+ "package": "software.amazon.awscdk.services.kinesisanalyticsv2"
1675
+ },
1676
+ "python": {
1677
+ "module": "aws_cdk.aws_kinesisanalyticsv2"
1678
+ }
1679
+ }
1680
+ },
1570
1681
  "aws-cdk-lib.aws_kinesisfirehose": {
1571
1682
  "targets": {
1572
1683
  "dotnet": {
@@ -1580,6 +1691,19 @@
1580
1691
  }
1581
1692
  }
1582
1693
  },
1694
+ "aws-cdk-lib.aws_kinesisvideo": {
1695
+ "targets": {
1696
+ "dotnet": {
1697
+ "namespace": "Amazon.CDK.AWS.KinesisVideo"
1698
+ },
1699
+ "java": {
1700
+ "package": "software.amazon.awscdk.services.kinesisvideo"
1701
+ },
1702
+ "python": {
1703
+ "module": "aws_cdk.aws_kinesisvideo"
1704
+ }
1705
+ }
1706
+ },
1583
1707
  "aws-cdk-lib.aws_kms": {
1584
1708
  "targets": {
1585
1709
  "dotnet": {
@@ -1866,6 +1990,19 @@
1866
1990
  }
1867
1991
  }
1868
1992
  },
1993
+ "aws-cdk-lib.aws_mediatailor": {
1994
+ "targets": {
1995
+ "dotnet": {
1996
+ "namespace": "Amazon.CDK.AWS.MediaTailor"
1997
+ },
1998
+ "java": {
1999
+ "package": "software.amazon.awscdk.services.mediatailor"
2000
+ },
2001
+ "python": {
2002
+ "module": "aws_cdk.aws_mediatailor"
2003
+ }
2004
+ }
2005
+ },
1869
2006
  "aws-cdk-lib.aws_memorydb": {
1870
2007
  "targets": {
1871
2008
  "dotnet": {
@@ -2009,6 +2146,19 @@
2009
2146
  }
2010
2147
  }
2011
2148
  },
2149
+ "aws-cdk-lib.aws_personalize": {
2150
+ "targets": {
2151
+ "dotnet": {
2152
+ "namespace": "Amazon.CDK.AWS.Personalize"
2153
+ },
2154
+ "java": {
2155
+ "package": "software.amazon.awscdk.services.personalize"
2156
+ },
2157
+ "python": {
2158
+ "module": "aws_cdk.aws_personalize"
2159
+ }
2160
+ }
2161
+ },
2012
2162
  "aws-cdk-lib.aws_pinpoint": {
2013
2163
  "targets": {
2014
2164
  "dotnet": {
@@ -2827,6 +2977,19 @@
2827
2977
  "module": "aws_cdk.region_info"
2828
2978
  }
2829
2979
  }
2980
+ },
2981
+ "aws-cdk-lib.triggers": {
2982
+ "targets": {
2983
+ "dotnet": {
2984
+ "namespace": "Amazon.CDK.Triggers"
2985
+ },
2986
+ "java": {
2987
+ "package": "software.amazon.awscdk.triggers"
2988
+ },
2989
+ "python": {
2990
+ "module": "aws_cdk.triggers"
2991
+ }
2992
+ }
2830
2993
  }
2831
2994
  },
2832
2995
  "targets": {
@@ -2886,7 +3049,7 @@
2886
3049
  "stability": "experimental"
2887
3050
  },
2888
3051
  "homepage": "https://github.com/pwrdrvr/microapps-core",
2889
- "jsiiVersion": "1.52.1 (build 5ccc8f6)",
3052
+ "jsiiVersion": "1.59.0 (build eb02c92)",
2890
3053
  "keywords": [
2891
3054
  "awscdk",
2892
3055
  "cdk",
@@ -2903,7 +3066,7 @@
2903
3066
  },
2904
3067
  "name": "@pwrdrvr/microapps-cdk",
2905
3068
  "readme": {
2906
- "markdown": "![Build/Deploy CI](https://github.com/pwrdrvr/microapps-core/actions/workflows/ci.yml/badge.svg) ![Main Build](https://github.com/pwrdrvr/microapps-core/actions/workflows/main-build.yml/badge.svg) ![Release](https://github.com/pwrdrvr/microapps-core/actions/workflows/release.yml/badge.svg)\n\n# Overview\n\nThe MicroApps project enables rapidly deploying many web apps to AWS on a single shared host name, fronted by a CloudFront Distribution, serving static assets from an S3 Bucket, and routing application requests via API Gateway. MicroApps is delivered as a CDK Construct for deployment, although alternative deployment methods can be used if desired and implemented.\n\nMicroApps allows many versions of an application to be deployed either as ephemeral deploys (e.g. for pull request builds) or as semi-permanent deploys. The `microapps-router` Lambda function handled routing requests to apps to the current version targeted for a particular application start request using rules as complex as one is interested in implementing (e.g. A/B testing integration, canary releases, per-user rules for logged in users, per-group, per-deparment, and default rules).\n\nUsers start applications via a URL such as `[/{prefix}]/{appname}/`, which hits the `microapps-router` that looks up the version of the application to be run, then renders a transparent `iframe` with a link to that version. The URL seen by the user in the browser (and available for bookmarking) has no version in it, so subsequent launches (e.g. the next day or just in another tab) will lookup the version again. All relative URL API requests (e.g. `some/api/path`) will go to the corresponding API version that matches the version of the loaded static files, eliminating issues of incompatibility between static files and API deployments.\n\nFor development / testing purposes only, each version of an applicaton can be accessed directly via a URL of the pattern `[/{prefix}]/{appname}/{semver}/`. These \"versioned\" URLs are not intended to be advertised to end users as they would cause a user to be stuck on a particular version of the app if the URL was bookmarked. Note that the system does not limit access to particular versions of an application, as of 2022-01-26, but that can be added as a feature.\n\n# Table of Contents <!-- omit in toc -->\n\n- [Overview](#overview)\n- [Video Preview of the Deploying CDK Construct](#video-preview-of-the-deploying-cdk-construct)\n- [Installation / CDK Constructs](#installation--cdk-constructs)\n- [Tutorial - Bootstrapping a Deploy](#tutorial---bootstrapping-a-deploy)\n- [Why MicroApps](#why-microapps)\n- [Limitations / Future Development](#limitations--future-development)\n- [Related Projects / Components](#related-projects--components)\n- [Architecure Diagram](#architecure-diagram)\n- [Project Layout](#project-layout)\n- [Creating a MicroApp Using Zip Lambda Functions](#creating-a-microapp-using-zip-lambda-functions)\n- [Creating a MicroApp Using Docker Lambda Functions](#creating-a-microapp-using-docker-lambda-functions)\n - [Next.js Apps](#nextjs-apps)\n - [Modify package.json](#modify-packagejson)\n - [Install Dependencies](#install-dependencies)\n - [Dockerfile](#dockerfile)\n - [next.config.js](#nextconfigjs)\n - [deploy.json](#deployjson)\n - [serverless.yaml](#serverlessyaml)\n\n# Video Preview of the Deploying CDK Construct\n\n![Video Preview of Deploying](https://raw.githubusercontent.com/pwrdrvr/microapps-core/blob/main/assets/videos/microapps-core-demo-deploy.gif)\n\n# Installation / CDK Constructs\n\n- `npm i --save-dev @pwrdrvr/microapps-cdk`\n- Add `MicroApps` construct to your stack\n- The `MicroApps` construct does a \"turn-key\" deployment complete with the Release app\n- [Construct Hub](https://constructs.dev/packages/@pwrdrvr/microapps-cdk/)\n - CDK API docs\n - Python, DotNet, Java, JS/TS installation instructions\n\n# Tutorial - Bootstrapping a Deploy\n\n- `git clone https://github.com/pwrdrvr/microapps-core.git`\n - Note: the repo is only being for the example CDK Stack, it is not necessary to clone the repo when used in a custom CDK Stack\n- `cd microapps-core`\n- `npm i -g aws-cdk`\n - Install AWS CDK v2 CLI\n- `asp [my-sso-profile-name]`\n - Using the `aws` plugin from `oh-my-zsh` for AWS SSO\n - Of course, there are other methods of setting env vars\n- `aws sso login`\n - Establish an AWS SSO session\n- `cdk-sso-sync`\n - Using `npm i -g cdk-sso-sync`\n - Sets AWS SSO credentials in a way that CDK can use them\n - Not necessary if not using AWS SSO\n- `export AWS_REGION=us-east-2`\n - Region needs to be set for the Lambda invoke - This can be done other ways in `~/.aws/config` as well\n- `./deploy.sh`\n - Deploys the CDK Stack\n - Essentially runs two commands along with extraction of outputs:\n - `npx cdk deploy --context @pwrdrvr/microapps:stackName=microapps-demo-deploy --context @pwrdrvr/microapps:deployReleaseApp=true microapps-basic`\n - `npx microapps-publish publish -a release -n ${RELEASE_APP_PACKAGE_VERSION} -d ${DEPLOYER_LAMBDA_NAME} -l ${RELEASE_APP_LAMBDA_NAME} -s node_modules/@pwrdrvr/microapps-app-release-cdk/lib/.static_files/release/${RELEASE_APP_PACKAGE_VERSION}/ --overwrite --noCache`\n - URL will be printed as last output\n\n# Why MicroApps\n\nMicroApps are like micro services, but for Web UIs. A MicroApp allows a single functional site to be developed by many independent teams within an organization. Teams must coordinate deployments and agree upon one implementation technology and framework when building a monolithic, or even a monorepo, web application.\n\nTeams using MicroApps can deploy independently of each other with coordination being required only at points of intentional integration (e.g. adding a feature to pass context from one MicroApp to another or coordination of a major feature release to users) and sharing UI styles, if desired (it is possible to build styles that look the same across many different UI frameworks).\n\nMicroApps also allow each team to use a UI framework and backend language that is most appropriate for their solving their business problem. Not every app has to use React or Next.js or even Node on the backend, but instead they can use whatever framework they want and Java, Go, C#, Python, etc. for UI API calls.\n\nFor internal sites, or logged-in-customer sites, different tools or products can be hosted in entirely independent MicroApps. A menuing system / toolbar application can be created as a MicroApp and that menu app can open the apps in the system within a transparent iframe. For externally facing sites, such as for an e-commerce site, it is possible to have a MicroApp serving `/product/...`, another serving `/search/...`, another serving `/`, etc.\n\n# Limitations / Future Development\n\n- `iframes`\n - Yeah, yeah: `iframes` are not framesets and most of the hate about iframes is probably better directed at framesets\n - The iframe serves a purpose but it stinks that it is there, primarily because it will cause issues with search bot indexing (SEO)\n - There are other options available to implement that have their own drabacks:\n - Using the `microapps-router` to proxy the \"app start\" request to a particular version of an app that then renders all of it's API resource requests to versioned URLs\n - Works only with frameworks that support hashing filenams for each deploy to unique names\n - This page would need to be marked as non-cachable\n - This may work well with Next.js which wants to know the explicit path that it will be running at (it writes that path into all resource and API requests)\n - Possible issue: the app would need to work ok being displayed at `[/{prefix}]/{appname}` when it may think that it's being displayed at `[/{prefix}]/{appname}/{semver}`\n - Disadvantage: requires some level of UI framework features (e.g. writing the absolute resource paths) to work correctly - may not work as easily for all UI frameworks\n - HTML5 added features to allow setting the relative path of all subsequent requests to be different than that displayed in the address bar\n - Gotta see if this works in modern browsers\n - Option to ditch the multiple-versions feature\n - Works only with frameworks that support hashing filenams for each deploy to unique names\n - Allows usage of the deploy and routing tooling without advantages and disadvantages of multiple-versions support\n- AWS Only\n - For the time being this has only been implemented for AWS technologies and APIs\n - It is possible that Azure and GCP have sufficient support to enable porting the framework\n - CDK would have to be replaced as well (unless it's made available for Azure and GCP in the near future)\n- `microapps-publish` only supports Lambda function apps\n - There is no technical reason for the apps to only run as Lambda functions\n - Web apps could just as easily run on EC2, Kubernetes, EKS, ECS, etc\n - Anything that API Gateway can route to can work for serving a MicroApp\n - The publish tool needs to provide additional options for setting up the API Gateway route to the app\n- Authentication\n - Authentication requires rolling your own API Gateway and CloudFront deployment at the moment\n - The \"turn key\" CDK Construct should provide options to show an example of how authentication can be integrated\n- Release Rules\n - Currently only a Default rule is supported\n - Need to evaluate if a generic implementation can be made, possibly allowing plugins or webhooks to support arbitrary rules\n - If not possible to make it perfectly generic, consider providing a more complete reference implementation of examples\n\n# Related Projects / Components\n\n- Release App\n - The Release app is an initial, rudimentary, release control console for setting the default version of an application\n - Built with Next.js\n - [pwrdrvr/microapps-app-release](https://github.com/pwrdrvr/microapps-app-release)\n- Next.js Demo App\n - The Next.js Tutorial application deployed as a MicroApp\n - [pwrdrvr/serverless-nextjs-demo](https://github.com/pwrdrvr/serverless-nextjs-demo)\n- Serverless Next.js Router\n - [pwrdrvr/serverless-nextjs-router](https://github.com/pwrdrvr/serverless-nextjs-router)\n - Complementary to [@sls-next/serverless-component](https://github.com/serverless-nextjs/serverless-next.js)\n - Allows Next.js apps to run as Lambda @ Origin for speed and cost improvements vs Lambda@Edge\n - Essentially the router translates CloudFront Lambda events to API Gateway Lambda events and vice versa for responses\n - The `serverless-nextjs` project allows Next.js apps to run as Lambda functions without Express, but there was a design change to make the Lambda functions run at Edge (note: need to recheck if this changed after early 2021)\n - Lambda@Edge is _at least_ 3x more expensive than Lambda at the origin:\n - In US East 1, the price per GB-Second is $0.00005001 for Lambda@Edge vs $0.0000166667 for Lambda at the origin\n - Additionally, any DB or services calls from Lambda@Edge back to the origin will pay that 3x higher per GB-Second cost for any time spent waiting to send the request and get a response. Example:\n - Lambda@Edge\n - 0.250s Round Trip Time (RTT) for EU-zone edge request to hit US-East 1 Origin\n - 0.200s DB lookup time\n - 0.050s CPU usage to process the DB response\n - 0.500s total billed time @ $0.00005001 @ 128 MB\n - $0.000003125625 total charge\n - Lambda at Origin\n - RTT does not apply (it's effectively 1-2 ms to hit a DB in the same region)\n - 0.200s DB lookup time\n - 0.050s CPU usage to process the DB response\n - 0.250s total billed time @ $0.0000166667 @ 128 MB\n - Half the billed time of running on Lambda@Edge\n - 1/6th the cost of running on Lambda@Edge:\n - $0.000000520834375 total charge (assuming no CPU time to process the response)\n - $0.000003125625 / $0.000000520834375 = 6x more expensive in Lambda@Edge\n\n# Architecure Diagram\n\n![Architecure Diagram](https://raw.githubusercontent.com/pwrdrvr/microapps-core/main/assets/images/architecture-diagram.png)\n\n# Project Layout\n\n- [packages/cdk](https://github.com/pwrdrvr/microapps-core/tree/main/packages/cdk)\n - Example CDK Stack\n - Deploys MicroApps CDK stack for the GitHub Workflows\n - Can be used as an example of how to use the MicroApps CDK Construct\n- [packages/demo-app](https://github.com/pwrdrvr/microapps-core/tree/main/packages/demo-app)\n - Example app with static resources and a Lambda function\n - Does not use any Web UI framework at all\n- [packages/microapps-cdk](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-cdk)\n - MicroApps\n - \"Turn key\" CDK Construct that creates all assets needed for a working MicroApps deployment\n - MicroAppsAPIGwy\n - Create APIGateway HTTP API\n - Creates domain names to point to the edge (Cloudfront) and origin (API Gateway)\n - MicroAppsCF\n - Creates Cloudfront distribution\n - MicroAppsS3\n - Creates S3 buckets\n - MicroAppsSvcs\n - Create DynamoDB table\n - Create Deployer Lambda function\n - Create Router Lambda function\n- [packages/microapps-datalib](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-datalib)\n - Installed from `npm`:\n - `npm i -g @pwrdrvr/microapps-datalib`\n - APIs for access to the DynamoDB Table used by `microapps-publish`, `microapps-deployer`, and `@pwrdrvr/microapps-app-release-cdk`\n- [packages/microapps-deployer](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-deployer)\n - Lambda service invoked by `microapps-publish` to record new app/version in the DynamoDB table, create API Gateway integrations, copy S3 assets from staging to prod bucket, etc.\n - Returns a temporary S3 token with restricted access to the staging S3 bucket for upload of the static files for one app/semver\n- [packages/microapps-publish](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-publish)\n - Installed from `npm`:\n - `npm i -g @pwrdrvr/microapps-publish`\n - Node executable that updates versions in config files, deploys static assets to the S3 staging bucket, optionally compiles and deploys a new Lambda function version, and invokes `microapps-deployer`\n - AWS IAM permissions required:\n - `lambda:InvokeFunction`\n- [packages/microapps-router](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-router)\n - Lambda function that determines which version of an app to point a user to on a particular invocation\n\n# Creating a MicroApp Using Zip Lambda Functions\n\n[TBC]\n\n# Creating a MicroApp Using Docker Lambda Functions\n\nNote: semi-deprecated as of 2022-01-27. Zip Lambda functions are better supported.\n\n## Next.js Apps\n\nCreate a Next.js app then follow the steps in this section to set it up for publishing to AWS Lambda @ Origin as a MicroApp. To publish new versions of the app use `npx microapps-publish --new-version x.y.z` when logged in to the target AWS account.\n\n### Modify package.json\n\nReplace the version with `0.0.0` so it can be modified by the `microapps-publish` tool.\n\n### Install Dependencies\n\n```\nnpm i --save-dev @sls-next/serverless-component@1.19.0 @pwrdrvr/serverless-nextjs-router @pwrdrvr/microapps-publish\n```\n\n### Dockerfile\n\nAdd this file to the root of the app.\n\n```Dockerfile\nFROM node:15-slim as base\n\nWORKDIR /app\n\n# Download the sharp libs once to save time\n# Do this before copying anything else in\nRUN mkdir -p image-lambda-npms && \\\n cd image-lambda-npms && npm i sharp && \\\n rm -rf node_modules/sharp/vendor/*/include/\n\n# Copy in the build output from `npx serverless`\nCOPY .serverless_nextjs .\nCOPY config.json .\n\n# Move the sharp libs into place\nRUN rm -rf image-lambda/node_modules/ && \\\n mv image-lambda-npms/node_modules image-labmda/ && \\\n rm -rf image-lambda-npms\n\nFROM public.ecr.aws/lambda/nodejs:14 AS final\n\n# Copy in the munged code\nCOPY --from=base /app .\n\nCMD [ \"./index.handler\" ]\n```\n\n### next.config.js\n\nAdd this file to the root of the app.\n\nReplace `appname` with your URL path-compatible application name.\n\n```js\nconst appRoot = '/appname/0.0.0';\n\n// eslint-disable-next-line no-undef\nmodule.exports = {\n target: 'serverless',\n webpack: (config, _options) => {\n return config;\n },\n basePath: appRoot,\n publicRuntimeConfig: {\n // Will be available on both server and client\n staticFolder: appRoot,\n },\n};\n```\n\n### deploy.json\n\nAdd this file to the root of the app.\n\nReplace `appname` with your URL path-compatible application name.\n\n```json\n{\n \"AppName\": \"appname\",\n \"SemVer\": \"0.0.0\",\n \"DefaultFile\": \"\",\n \"StaticAssetsPath\": \"./.serverless_nextjs/assets/appname/0.0.0/\",\n \"LambdaARN\": \"arn:aws:lambda:us-east-1:123456789012:function:appname:v0_0_0\",\n \"AWSAccountID\": \"123456789012\",\n \"AWSRegion\": \"us-east-2\",\n \"ServerlessNextRouterPath\": \"./node_modules/@pwrdrvr/serverless-nextjs-router/dist/index.js\"\n}\n```\n\n### serverless.yaml\n\nAdd this file to the root of the app.\n\n```yaml\nnextApp:\n component: './node_modules/@sls-next/serverless-component'\n inputs:\n deploy: false\n uploadStaticAssetsFromBuild: false\n```\n"
3069
+ "markdown": "![Build/Deploy CI](https://github.com/pwrdrvr/microapps-core/actions/workflows/ci.yml/badge.svg) ![Main Build](https://github.com/pwrdrvr/microapps-core/actions/workflows/main-build.yml/badge.svg) ![Release](https://github.com/pwrdrvr/microapps-core/actions/workflows/release.yml/badge.svg)\n\n# Overview\n\nThe MicroApps project enables rapidly deploying many web apps to AWS on a single shared host name, fronted by a CloudFront Distribution, serving static assets from an S3 Bucket, and routing application requests via API Gateway. MicroApps is delivered as a CDK Construct for deployment, although alternative deployment methods can be used if desired and implemented.\n\nMicroApps allows many versions of an application to be deployed either as ephemeral deploys (e.g. for pull request builds) or as semi-permanent deploys. The `microapps-router` Lambda function handled routing requests to apps to the current version targeted for a particular application start request using rules as complex as one is interested in implementing (e.g. A/B testing integration, canary releases, per-user rules for logged in users, per-group, per-deparment, and default rules).\n\nUsers start applications via a URL such as `[/{prefix}]/{appname}/`, which hits the `microapps-router` that looks up the version of the application to be run, then renders a transparent `iframe` with a link to that version. The URL seen by the user in the browser (and available for bookmarking) has no version in it, so subsequent launches (e.g. the next day or just in another tab) will lookup the version again. All relative URL API requests (e.g. `some/api/path`) will go to the corresponding API version that matches the version of the loaded static files, eliminating issues of incompatibility between static files and API deployments.\n\nFor development / testing purposes only, each version of an applicaton can be accessed directly via a URL of the pattern `[/{prefix}]/{appname}/{semver}/`. These \"versioned\" URLs are not intended to be advertised to end users as they would cause a user to be stuck on a particular version of the app if the URL was bookmarked. Note that the system does not limit access to particular versions of an application, as of 2022-01-26, but that can be added as a feature.\n\n# Table of Contents <!-- omit in toc -->\n\n- [Overview](#overview)\n- [Video Preview of the Deploying CDK Construct](#video-preview-of-the-deploying-cdk-construct)\n- [Installation / CDK Constructs](#installation--cdk-constructs)\n- [Tutorial - Bootstrapping a Deploy](#tutorial---bootstrapping-a-deploy)\n- [Why MicroApps](#why-microapps)\n- [Limitations / Future Development](#limitations--future-development)\n- [Related Projects / Components](#related-projects--components)\n- [Architecure Diagram](#architecure-diagram)\n- [Project Layout](#project-layout)\n- [Creating a MicroApp Using Zip Lambda Functions](#creating-a-microapp-using-zip-lambda-functions)\n- [Creating a MicroApp Using Docker Lambda Functions](#creating-a-microapp-using-docker-lambda-functions)\n - [Next.js Apps](#nextjs-apps)\n - [Modify package.json](#modify-packagejson)\n - [Install Dependencies](#install-dependencies)\n - [Dockerfile](#dockerfile)\n - [next.config.js](#nextconfigjs)\n - [deploy.json](#deployjson)\n - [serverless.yaml](#serverlessyaml)\n\n# Video Preview of the Deploying CDK Construct\n\n![Video Preview of Deploying](https://raw.githubusercontent.com/pwrdrvr/microapps-core/main/assets/videos/microapps-core-demo-deploy.gif)\n\n# Installation / CDK Constructs\n\n- `npm i --save-dev @pwrdrvr/microapps-cdk`\n- Add `MicroApps` construct to your stack\n- The `MicroApps` construct does a \"turn-key\" deployment complete with the Release app\n- [Construct Hub](https://constructs.dev/packages/@pwrdrvr/microapps-cdk/)\n - CDK API docs\n - Python, DotNet, Java, JS/TS installation instructions\n\n# Tutorial - Bootstrapping a Deploy\n\n- `git clone https://github.com/pwrdrvr/microapps-core.git`\n - Note: the repo is only being for the example CDK Stack, it is not necessary to clone the repo when used in a custom CDK Stack\n- `cd microapps-core`\n- `npm i -g aws-cdk`\n - Install AWS CDK v2 CLI\n- `asp [my-sso-profile-name]`\n - Using the `aws` plugin from `oh-my-zsh` for AWS SSO\n - Of course, there are other methods of setting env vars\n- `aws sso login`\n - Establish an AWS SSO session\n- `cdk-sso-sync`\n - Using `npm i -g cdk-sso-sync`\n - Sets AWS SSO credentials in a way that CDK can use them\n - Not necessary if not using AWS SSO\n- `export AWS_REGION=us-east-2`\n - Region needs to be set for the Lambda invoke - This can be done other ways in `~/.aws/config` as well\n- `./deploy.sh`\n - Deploys the CDK Stack\n - Essentially runs two commands along with extraction of outputs:\n - `npx cdk deploy --context @pwrdrvr/microapps:stackName=microapps-demo-deploy --context @pwrdrvr/microapps:deployReleaseApp=true microapps-basic`\n - `npx microapps-publish publish -a release -n ${RELEASE_APP_PACKAGE_VERSION} -d ${DEPLOYER_LAMBDA_NAME} -l ${RELEASE_APP_LAMBDA_NAME} -s node_modules/@pwrdrvr/microapps-app-release-cdk/lib/.static_files/release/${RELEASE_APP_PACKAGE_VERSION}/ --overwrite --noCache`\n - URL will be printed as last output\n\n# Why MicroApps\n\nMicroApps are like micro services, but for Web UIs. A MicroApp allows a single functional site to be developed by many independent teams within an organization. Teams must coordinate deployments and agree upon one implementation technology and framework when building a monolithic, or even a monorepo, web application.\n\nTeams using MicroApps can deploy independently of each other with coordination being required only at points of intentional integration (e.g. adding a feature to pass context from one MicroApp to another or coordination of a major feature release to users) and sharing UI styles, if desired (it is possible to build styles that look the same across many different UI frameworks).\n\nMicroApps also allow each team to use a UI framework and backend language that is most appropriate for their solving their business problem. Not every app has to use React or Next.js or even Node on the backend, but instead they can use whatever framework they want and Java, Go, C#, Python, etc. for UI API calls.\n\nFor internal sites, or logged-in-customer sites, different tools or products can be hosted in entirely independent MicroApps. A menuing system / toolbar application can be created as a MicroApp and that menu app can open the apps in the system within a transparent iframe. For externally facing sites, such as for an e-commerce site, it is possible to have a MicroApp serving `/product/...`, another serving `/search/...`, another serving `/`, etc.\n\n# Limitations / Future Development\n\n- `iframes`\n - Yeah, yeah: `iframes` are not framesets and most of the hate about iframes is probably better directed at framesets\n - The iframe serves a purpose but it stinks that it is there, primarily because it will cause issues with search bot indexing (SEO)\n - There are other options available to implement that have their own drabacks:\n - Using the `microapps-router` to proxy the \"app start\" request to a particular version of an app that then renders all of it's API resource requests to versioned URLs\n - Works only with frameworks that support hashing filenams for each deploy to unique names\n - This page would need to be marked as non-cachable\n - This may work well with Next.js which wants to know the explicit path that it will be running at (it writes that path into all resource and API requests)\n - Possible issue: the app would need to work ok being displayed at `[/{prefix}]/{appname}` when it may think that it's being displayed at `[/{prefix}]/{appname}/{semver}`\n - Disadvantage: requires some level of UI framework features (e.g. writing the absolute resource paths) to work correctly - may not work as easily for all UI frameworks\n - HTML5 added features to allow setting the relative path of all subsequent requests to be different than that displayed in the address bar\n - Gotta see if this works in modern browsers\n - Option to ditch the multiple-versions feature\n - Works only with frameworks that support hashing filenams for each deploy to unique names\n - Allows usage of the deploy and routing tooling without advantages and disadvantages of multiple-versions support\n- AWS Only\n - For the time being this has only been implemented for AWS technologies and APIs\n - It is possible that Azure and GCP have sufficient support to enable porting the framework\n - CDK would have to be replaced as well (unless it's made available for Azure and GCP in the near future)\n- `microapps-publish` only supports Lambda function apps\n - There is no technical reason for the apps to only run as Lambda functions\n - Web apps could just as easily run on EC2, Kubernetes, EKS, ECS, etc\n - Anything that API Gateway can route to can work for serving a MicroApp\n - The publish tool needs to provide additional options for setting up the API Gateway route to the app\n- Authentication\n - Authentication requires rolling your own API Gateway and CloudFront deployment at the moment\n - The \"turn key\" CDK Construct should provide options to show an example of how authentication can be integrated\n- Release Rules\n - Currently only a Default rule is supported\n - Need to evaluate if a generic implementation can be made, possibly allowing plugins or webhooks to support arbitrary rules\n - If not possible to make it perfectly generic, consider providing a more complete reference implementation of examples\n\n# Related Projects / Components\n\n- Release App\n - The Release app is an initial, rudimentary, release control console for setting the default version of an application\n - Built with Next.js\n - [pwrdrvr/microapps-app-release](https://github.com/pwrdrvr/microapps-app-release)\n- Next.js Demo App\n - The Next.js Tutorial application deployed as a MicroApp\n - [pwrdrvr/serverless-nextjs-demo](https://github.com/pwrdrvr/serverless-nextjs-demo)\n- Serverless Next.js Router\n - [pwrdrvr/serverless-nextjs-router](https://github.com/pwrdrvr/serverless-nextjs-router)\n - Complementary to [@sls-next/serverless-component](https://github.com/serverless-nextjs/serverless-next.js)\n - Allows Next.js apps to run as Lambda @ Origin for speed and cost improvements vs Lambda@Edge\n - Essentially the router translates CloudFront Lambda events to API Gateway Lambda events and vice versa for responses\n - The `serverless-nextjs` project allows Next.js apps to run as Lambda functions without Express, but there was a design change to make the Lambda functions run at Edge (note: need to recheck if this changed after early 2021)\n - Lambda@Edge is _at least_ 3x more expensive than Lambda at the origin:\n - In US East 1, the price per GB-Second is $0.00005001 for Lambda@Edge vs $0.0000166667 for Lambda at the origin\n - Additionally, any DB or services calls from Lambda@Edge back to the origin will pay that 3x higher per GB-Second cost for any time spent waiting to send the request and get a response. Example:\n - Lambda@Edge\n - 0.250s Round Trip Time (RTT) for EU-zone edge request to hit US-East 1 Origin\n - 0.200s DB lookup time\n - 0.050s CPU usage to process the DB response\n - 0.500s total billed time @ $0.00005001 @ 128 MB\n - $0.000003125625 total charge\n - Lambda at Origin\n - RTT does not apply (it's effectively 1-2 ms to hit a DB in the same region)\n - 0.200s DB lookup time\n - 0.050s CPU usage to process the DB response\n - 0.250s total billed time @ $0.0000166667 @ 128 MB\n - Half the billed time of running on Lambda@Edge\n - 1/6th the cost of running on Lambda@Edge:\n - $0.000000520834375 total charge (assuming no CPU time to process the response)\n - $0.000003125625 / $0.000000520834375 = 6x more expensive in Lambda@Edge\n\n# Architecure Diagram\n\n![Architecure Diagram](https://raw.githubusercontent.com/pwrdrvr/microapps-core/main/assets/images/architecture-diagram.png)\n\n# Project Layout\n\n- [packages/cdk](https://github.com/pwrdrvr/microapps-core/tree/main/packages/cdk)\n - Example CDK Stack\n - Deploys MicroApps CDK stack for the GitHub Workflows\n - Can be used as an example of how to use the MicroApps CDK Construct\n- [packages/demo-app](https://github.com/pwrdrvr/microapps-core/tree/main/packages/demo-app)\n - Example app with static resources and a Lambda function\n - Does not use any Web UI framework at all\n- [packages/microapps-cdk](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-cdk)\n - MicroApps\n - \"Turn key\" CDK Construct that creates all assets needed for a working MicroApps deployment\n - MicroAppsAPIGwy\n - Create APIGateway HTTP API\n - Creates domain names to point to the edge (Cloudfront) and origin (API Gateway)\n - MicroAppsCF\n - Creates Cloudfront distribution\n - MicroAppsS3\n - Creates S3 buckets\n - MicroAppsSvcs\n - Create DynamoDB table\n - Create Deployer Lambda function\n - Create Router Lambda function\n- [packages/microapps-datalib](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-datalib)\n - Installed from `npm`:\n - `npm i -g @pwrdrvr/microapps-datalib`\n - APIs for access to the DynamoDB Table used by `microapps-publish`, `microapps-deployer`, and `@pwrdrvr/microapps-app-release-cdk`\n- [packages/microapps-deployer](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-deployer)\n - Lambda service invoked by `microapps-publish` to record new app/version in the DynamoDB table, create API Gateway integrations, copy S3 assets from staging to prod bucket, etc.\n - Returns a temporary S3 token with restricted access to the staging S3 bucket for upload of the static files for one app/semver\n- [packages/microapps-publish](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-publish)\n - Installed from `npm`:\n - `npm i -g @pwrdrvr/microapps-publish`\n - Node executable that updates versions in config files, deploys static assets to the S3 staging bucket, optionally compiles and deploys a new Lambda function version, and invokes `microapps-deployer`\n - AWS IAM permissions required:\n - `lambda:InvokeFunction`\n- [packages/microapps-router](https://github.com/pwrdrvr/microapps-core/tree/main/packages/microapps-router)\n - Lambda function that determines which version of an app to point a user to on a particular invocation\n\n# Creating a MicroApp Using Zip Lambda Functions\n\n[TBC]\n\n# Creating a MicroApp Using Docker Lambda Functions\n\nNote: semi-deprecated as of 2022-01-27. Zip Lambda functions are better supported.\n\n## Next.js Apps\n\nCreate a Next.js app then follow the steps in this section to set it up for publishing to AWS Lambda @ Origin as a MicroApp. To publish new versions of the app use `npx microapps-publish --new-version x.y.z` when logged in to the target AWS account.\n\n### Modify package.json\n\nReplace the version with `0.0.0` so it can be modified by the `microapps-publish` tool.\n\n### Install Dependencies\n\n```\nnpm i --save-dev @sls-next/serverless-component@1.19.0 @pwrdrvr/serverless-nextjs-router @pwrdrvr/microapps-publish\n```\n\n### Dockerfile\n\nAdd this file to the root of the app.\n\n```Dockerfile\nFROM node:15-slim as base\n\nWORKDIR /app\n\n# Download the sharp libs once to save time\n# Do this before copying anything else in\nRUN mkdir -p image-lambda-npms && \\\n cd image-lambda-npms && npm i sharp && \\\n rm -rf node_modules/sharp/vendor/*/include/\n\n# Copy in the build output from `npx serverless`\nCOPY .serverless_nextjs .\nCOPY config.json .\n\n# Move the sharp libs into place\nRUN rm -rf image-lambda/node_modules/ && \\\n mv image-lambda-npms/node_modules image-labmda/ && \\\n rm -rf image-lambda-npms\n\nFROM public.ecr.aws/lambda/nodejs:14 AS final\n\n# Copy in the munged code\nCOPY --from=base /app .\n\nCMD [ \"./index.handler\" ]\n```\n\n### next.config.js\n\nAdd this file to the root of the app.\n\nReplace `appname` with your URL path-compatible application name.\n\n```js\nconst appRoot = '/appname/0.0.0';\n\n// eslint-disable-next-line no-undef\nmodule.exports = {\n target: 'serverless',\n webpack: (config, _options) => {\n return config;\n },\n basePath: appRoot,\n publicRuntimeConfig: {\n // Will be available on both server and client\n staticFolder: appRoot,\n },\n};\n```\n\n### deploy.json\n\nAdd this file to the root of the app.\n\nReplace `appname` with your URL path-compatible application name.\n\n```json\n{\n \"AppName\": \"appname\",\n \"SemVer\": \"0.0.0\",\n \"DefaultFile\": \"\",\n \"StaticAssetsPath\": \"./.serverless_nextjs/assets/appname/0.0.0/\",\n \"LambdaARN\": \"arn:aws:lambda:us-east-1:123456789012:function:appname:v0_0_0\",\n \"AWSAccountID\": \"123456789012\",\n \"AWSRegion\": \"us-east-2\",\n \"ServerlessNextRouterPath\": \"./node_modules/@pwrdrvr/serverless-nextjs-router/dist/index.js\"\n}\n```\n\n### serverless.yaml\n\nAdd this file to the root of the app.\n\n```yaml\nnextApp:\n component: './node_modules/@sls-next/serverless-component'\n inputs:\n deploy: false\n uploadStaticAssetsFromBuild: false\n```\n"
2907
3070
  },
2908
3071
  "repository": {
2909
3072
  "type": "git",
@@ -3393,7 +3556,7 @@
3393
3556
  "kind": "interface",
3394
3557
  "locationInModule": {
3395
3558
  "filename": "src/MicroAppsSvcs.ts",
3396
- "line": 193
3559
+ "line": 153
3397
3560
  },
3398
3561
  "name": "IMicroAppsSvcs",
3399
3562
  "properties": [
@@ -3406,7 +3569,7 @@
3406
3569
  "immutable": true,
3407
3570
  "locationInModule": {
3408
3571
  "filename": "src/MicroAppsSvcs.ts",
3409
- "line": 202
3572
+ "line": 162
3410
3573
  },
3411
3574
  "name": "deployerFunc",
3412
3575
  "type": {
@@ -3422,7 +3585,7 @@
3422
3585
  "immutable": true,
3423
3586
  "locationInModule": {
3424
3587
  "filename": "src/MicroAppsSvcs.ts",
3425
- "line": 207
3588
+ "line": 167
3426
3589
  },
3427
3590
  "name": "routerFunc",
3428
3591
  "type": {
@@ -3438,7 +3601,7 @@
3438
3601
  "immutable": true,
3439
3602
  "locationInModule": {
3440
3603
  "filename": "src/MicroAppsSvcs.ts",
3441
- "line": 197
3604
+ "line": 157
3442
3605
  },
3443
3606
  "name": "table",
3444
3607
  "type": {
@@ -4735,7 +4898,7 @@
4735
4898
  },
4736
4899
  "locationInModule": {
4737
4900
  "filename": "src/MicroAppsSvcs.ts",
4738
- "line": 230
4901
+ "line": 190
4739
4902
  },
4740
4903
  "parameters": [
4741
4904
  {
@@ -4765,7 +4928,7 @@
4765
4928
  "kind": "class",
4766
4929
  "locationInModule": {
4767
4930
  "filename": "src/MicroAppsSvcs.ts",
4768
- "line": 214
4931
+ "line": 174
4769
4932
  },
4770
4933
  "name": "MicroAppsSvcs",
4771
4934
  "properties": [
@@ -4777,7 +4940,7 @@
4777
4940
  "immutable": true,
4778
4941
  "locationInModule": {
4779
4942
  "filename": "src/MicroAppsSvcs.ts",
4780
- "line": 221
4943
+ "line": 181
4781
4944
  },
4782
4945
  "name": "deployerFunc",
4783
4946
  "overrides": "@pwrdrvr/microapps-cdk.IMicroAppsSvcs",
@@ -4793,7 +4956,7 @@
4793
4956
  "immutable": true,
4794
4957
  "locationInModule": {
4795
4958
  "filename": "src/MicroAppsSvcs.ts",
4796
- "line": 226
4959
+ "line": 186
4797
4960
  },
4798
4961
  "name": "routerFunc",
4799
4962
  "overrides": "@pwrdrvr/microapps-cdk.IMicroAppsSvcs",
@@ -4809,7 +4972,7 @@
4809
4972
  "immutable": true,
4810
4973
  "locationInModule": {
4811
4974
  "filename": "src/MicroAppsSvcs.ts",
4812
- "line": 216
4975
+ "line": 176
4813
4976
  },
4814
4977
  "name": "table",
4815
4978
  "overrides": "@pwrdrvr/microapps-cdk.IMicroAppsSvcs",
@@ -4831,7 +4994,7 @@
4831
4994
  "kind": "interface",
4832
4995
  "locationInModule": {
4833
4996
  "filename": "src/MicroAppsSvcs.ts",
4834
- "line": 58
4997
+ "line": 18
4835
4998
  },
4836
4999
  "name": "MicroAppsSvcsProps",
4837
5000
  "properties": [
@@ -4844,7 +5007,7 @@
4844
5007
  "immutable": true,
4845
5008
  "locationInModule": {
4846
5009
  "filename": "src/MicroAppsSvcs.ts",
4847
- "line": 92
5010
+ "line": 52
4848
5011
  },
4849
5012
  "name": "appEnv",
4850
5013
  "type": {
@@ -4860,7 +5023,7 @@
4860
5023
  "immutable": true,
4861
5024
  "locationInModule": {
4862
5025
  "filename": "src/MicroAppsSvcs.ts",
4863
- "line": 71
5026
+ "line": 31
4864
5027
  },
4865
5028
  "name": "bucketApps",
4866
5029
  "type": {
@@ -4876,7 +5039,7 @@
4876
5039
  "immutable": true,
4877
5040
  "locationInModule": {
4878
5041
  "filename": "src/MicroAppsSvcs.ts",
4879
- "line": 76
5042
+ "line": 36
4880
5043
  },
4881
5044
  "name": "bucketAppsOAI",
4882
5045
  "type": {
@@ -4892,7 +5055,7 @@
4892
5055
  "immutable": true,
4893
5056
  "locationInModule": {
4894
5057
  "filename": "src/MicroAppsSvcs.ts",
4895
- "line": 81
5058
+ "line": 41
4896
5059
  },
4897
5060
  "name": "bucketAppsStaging",
4898
5061
  "type": {
@@ -4908,7 +5071,7 @@
4908
5071
  "immutable": true,
4909
5072
  "locationInModule": {
4910
5073
  "filename": "src/MicroAppsSvcs.ts",
4911
- "line": 86
5074
+ "line": 46
4912
5075
  },
4913
5076
  "name": "httpApi",
4914
5077
  "type": {
@@ -4926,7 +5089,7 @@
4926
5089
  "immutable": true,
4927
5090
  "locationInModule": {
4928
5091
  "filename": "src/MicroAppsSvcs.ts",
4929
- "line": 100
5092
+ "line": 60
4930
5093
  },
4931
5094
  "name": "assetNameRoot",
4932
5095
  "optional": true,
@@ -4945,7 +5108,7 @@
4945
5108
  "immutable": true,
4946
5109
  "locationInModule": {
4947
5110
  "filename": "src/MicroAppsSvcs.ts",
4948
- "line": 108
5111
+ "line": 68
4949
5112
  },
4950
5113
  "name": "assetNameSuffix",
4951
5114
  "optional": true,
@@ -4964,7 +5127,7 @@
4964
5127
  "immutable": true,
4965
5128
  "locationInModule": {
4966
5129
  "filename": "src/MicroAppsSvcs.ts",
4967
- "line": 66
5130
+ "line": 26
4968
5131
  },
4969
5132
  "name": "removalPolicy",
4970
5133
  "optional": true,
@@ -4983,7 +5146,7 @@
4983
5146
  "immutable": true,
4984
5147
  "locationInModule": {
4985
5148
  "filename": "src/MicroAppsSvcs.ts",
4986
- "line": 187
5149
+ "line": 147
4987
5150
  },
4988
5151
  "name": "rootPathPrefix",
4989
5152
  "optional": true,
@@ -5003,7 +5166,7 @@
5003
5166
  "immutable": true,
5004
5167
  "locationInModule": {
5005
5168
  "filename": "src/MicroAppsSvcs.ts",
5006
- "line": 179
5169
+ "line": 139
5007
5170
  },
5008
5171
  "name": "s3PolicyBypassAROAs",
5009
5172
  "optional": true,
@@ -5028,7 +5191,7 @@
5028
5191
  "immutable": true,
5029
5192
  "locationInModule": {
5030
5193
  "filename": "src/MicroAppsSvcs.ts",
5031
- "line": 136
5194
+ "line": 96
5032
5195
  },
5033
5196
  "name": "s3PolicyBypassPrincipalARNs",
5034
5197
  "optional": true,
@@ -5052,7 +5215,7 @@
5052
5215
  "immutable": true,
5053
5216
  "locationInModule": {
5054
5217
  "filename": "src/MicroAppsSvcs.ts",
5055
- "line": 120
5218
+ "line": 80
5056
5219
  },
5057
5220
  "name": "s3StrictBucketPolicy",
5058
5221
  "optional": true,
@@ -5064,6 +5227,6 @@
5064
5227
  "symbolId": "src/MicroAppsSvcs:MicroAppsSvcsProps"
5065
5228
  }
5066
5229
  },
5067
- "version": "0.2.7",
5068
- "fingerprint": "nD106tOFbLJv3/y7Ovtq2trPWEFeOrpITjfLInCV5v4="
5230
+ "version": "0.2.10",
5231
+ "fingerprint": "cf+x3bDx5LxzTnbJaUgh6qyjhyDT8VAtswrEHtMJhqk="
5069
5232
  }
package/API.md CHANGED
File without changes
package/README.md CHANGED
@@ -33,7 +33,7 @@ For development / testing purposes only, each version of an applicaton can be ac
33
33
 
34
34
  # Video Preview of the Deploying CDK Construct
35
35
 
36
- ![Video Preview of Deploying](https://raw.githubusercontent.com/pwrdrvr/microapps-core/blob/main/assets/videos/microapps-core-demo-deploy.gif)
36
+ ![Video Preview of Deploying](https://raw.githubusercontent.com/pwrdrvr/microapps-core/main/assets/videos/microapps-core-demo-deploy.gif)
37
37
 
38
38
  # Installation / CDK Constructs
39
39
 
package/changelog.md ADDED
@@ -0,0 +1,2 @@
1
+
2
+ ### [0.2.10](https://github.com/pwrdrvr/microapps-core/compare/v0.2.9...v0.2.10) (2022-05-20)