@mavogel/cdk-vscode-server 0.0.64 โ†’ 0.0.66

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/.jsii CHANGED
@@ -4083,7 +4083,7 @@
4083
4083
  "stability": "experimental"
4084
4084
  },
4085
4085
  "homepage": "https://github.com/MV-Consulting/cdk-vscode-server.git",
4086
- "jsiiVersion": "5.9.11 (build e3d2007)",
4086
+ "jsiiVersion": "5.9.33 (build 8ebb533)",
4087
4087
  "keywords": [
4088
4088
  "aws",
4089
4089
  "cdk",
@@ -4102,7 +4102,7 @@
4102
4102
  },
4103
4103
  "name": "@mavogel/cdk-vscode-server",
4104
4104
  "readme": {
4105
- "markdown": "![Source](https://img.shields.io/github/stars/MV-Consulting/cdk-vscode-server?logo=github&label=GitHub%20Stars)\n[![Build Status](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml/badge.svg)](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml)\n[![ESLint Code Formatting](https://img.shields.io/badge/code_style-eslint-brightgreen.svg)](https://eslint.org)\n[![Latest release](https://img.shields.io/github/release/MV-Consulting/cdk-vscode-server.svg)](https://github.com/MV-Consulting/cdk-vscode-server/releases)\n![GitHub](https://img.shields.io/github/license/MV-Consulting/cdk-vscode-server)\n[![npm](https://img.shields.io/npm/dt/@mavogel/cdk-vscode-server?label=npm&color=orange)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n[![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n\n# cdk-vscode-server\n\nRunning your dev IDE vscode on AWS for development and workshop purposes.\n\n> [!Note]\n> This construct is designed for workshop purposes and does not fulfill all security and authentication best practices.\n\n![EXPERIMENTAL](https://img.shields.io/badge/stability-experimantal-orange?style=for-the-badge)**<br>This is an early version of the package. The API will change while I\nwe implement new features. Therefore make sure you use an exact version in your `package.json` before it reaches 1.0.0.**\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n - [Standard](#Standard)\n - [Pre-populate with Git Repository](#pre-populate-with-git-repository)\n - [Custom Domain Configuration](#custom-domain-configuration)\n - [Auto-Stop Configuration](#auto-stop-configuration)\n- [Solution Design](#solution-design)\n- [Inspiration](#inspiration)\n\n## Features\n\n- โšก **Quick Setup**: Spin up and configure your [vscode](https://code.visualstudio.com/) server in under 10 minutes in your AWS account\n- ๐Ÿ“ **Best Practice Setup**: Set up with [projen](https://projen.io/) and a [single configuration file](./.projenrc.ts) to keep your changes centralized.\n- ๐Ÿคนโ€โ™‚๏ธ **Pre-installed packages**: Besides the [vscode](https://code.visualstudio.com/) server, other tools and software packages such as `git`, `docker`, `awscli` `nodejs` and `python` are pre-installed on the EC2 instance.\n- ๐ŸŒ **Custom Domain Support**: Use your own domain name with automatic ACM certificate creation and Route53 DNS configuration, or bring your existing certificate.\n- ๐Ÿ’ฐ **Auto-Stop**: Automatically stop EC2 instances after inactivity with Elastic IP retention - save up to 75% on costs for development environments.\n- ๐Ÿ—๏ธ **Extensibility**: Pass in properties to the construct, which start with `additional*`. They allow you to extend the configuration to your needs. There are more to come...\n\n## Usage\nActually we supported 2 modes:\n\n### Standard\nThe following steps get you started:\n\n1. Create a new `awscdk-app` via\n```bash\nnpx projen new awscdk-app-ts --package-manager=npm\n```\n3. Add `@mavogel/cdk-vscode-server` as a dependency to your project in the `.projenrc.ts` file\n4. Run `npx projen` to install it\n5. Add the following to the `src/main.ts` file:\n```ts\nimport { App, Stack, StackProps } from 'aws-cdk-lib';\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\nimport { Construct } from 'constructs';\nimport {\n LinuxArchitectureType,\n LinuxFlavorType,\n VSCodeServer\n} from '@mavogel/cdk-vscode-server';\n\nexport class MyStack extends Stack {\n constructor(scope: Construct, id: string, props: StackProps = {}) {\n super(scope, id, props);\n\n new VSCodeServer(this, 'vscode', {\n // for example (or simply use the defaults by not setting the properties)\n instanceVolumeSize: 8,\n instanceClass: ec2.InstanceClass.M7G,\n instanceSize: ec2.InstanceSize.LARGE,\n instanceOperatingSystem: LinuxFlavorType.UBUNTU_24,\n instanceCpuArchitecture: LinuxArchitectureType.ARM,\n\n // ๐Ÿ‘‡๐Ÿฝ or if you want to give the InstanceRole more permissions\n additionalInstanceRolePolicies: [\n new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'codebuild:*',\n ],\n resources: [\n `arn:aws:codebuild:*:${Stack.of(this).account}:*/*`,\n ],\n }),\n ]\n\n // and more... ๐Ÿ’ก\n });\n }\n}\n\nconst env = {\n account: '123456789912',\n region: 'eu-central-1',\n};\n\nconst app = new App();\nnew MyStack(app, 'vscode-server', { env });\napp.synth();\n```\n\nand deploy it\n```bash\nnpx projen build\nnpx projen deploy\n```\n\nwith the output\n```console\nโœจ Deployment time: 509.87s\n\nOutputs:\ndev.vscodedomainName6729AA39 = https://d1foo65bar4baz.cloudfront.net/?folder=/Workshop\ndev.vscodepassword64FBCA12 = foobarbaz\n```\n\nSee the [examples](./examples) folder for more inspiration.\n\n### Pre-populate with Git Repository\n\nClone a git repository into the VS Code Server's home folder during instance setup - perfect for workshops or development environments with starter code:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n // Clone a git repository into the home folder\n repoUrl: 'https://github.com/aws-samples/my-workshop-repo.git',\n\n // Optional: customize the home folder path (default: /Workshop)\n homeFolder: '/MyWorkshop',\n\n // Optional: specify VS Code user (default: vscode-user)\n vscodeUser: 'workshop-user',\n});\n```\n\n**What happens:**\n1. During instance setup, the specified git repository is cloned into the user's home folder\n2. VS Code Server opens with the repository already loaded and ready to use\n3. Participants can start coding immediately without manual git clone steps\n\n**Use cases:**\n- Workshop environments with pre-configured starter code\n- Development environments with boilerplate projects\n- Training sessions with example applications\n- Code review sessions with pre-loaded repositories\n\n**Repository requirements:**\n- Must be publicly accessible (no authentication required)\n- HTTPS URLs only (SSH git URLs are not supported)\n- Repository will be cloned using `git clone` during instance initialization\n\nFor complete examples, see [examples/](./examples).\n\n### Custom Domain Configuration\n\nYou can configure your VS Code Server with a custom domain name instead of using the default CloudFront domain. The construct supports three different configuration options:\n\n#### Option 1: Auto-create Certificate with DNS Validation\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456', // optional - will auto-discover if not provided\n autoCreateCertificate: true,\n});\n```\n\nThis will:\n- Create an ACM certificate in us-east-1 (required for CloudFront)\n- Validate the certificate using DNS validation\n- Create a Route53 A record pointing to the CloudFront distribution\n- Configure the CloudFront distribution with the custom domain\n\n#### Option 2: Use Existing Certificate\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456',\n certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',\n});\n```\n\n**Requirements:**\n- Certificate must be in us-east-1 region\n- Certificate must be validated and ready to use\n- Certificate must include the domain name\n\n#### Option 3: Default (No Custom Domain)\n```ts\nnew VSCodeServer(this, 'vscode', {\n // No domain configuration - uses CloudFront default domain\n});\n```\n\nFor complete examples, see [examples/custom-domain/main.ts](./examples/custom-domain/main.ts).\n\n6. Then open the domain name in your favorite browser and you'd see the following login screen:\n![vscode-server-ui-login](docs/img/vscode-server-ui-login-min.png)\n\n7. After entering the password, you are logged into VSCode and can start coding :tada:\n\n![vscode-server-ui](docs/img/vscode-server-ui-min.png)\n\n> [!Important]\n> There are issues with copy pasting into the VSCode terminal within the Firefox browser (2025-01-12)\n\n### Auto-Stop Configuration\n\nSave up to 75% on costs by automatically stopping EC2 instances when idle:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n enableAutoStop: true, // Enable auto-stop feature\n idleTimeoutMinutes: 30, // Stop after 30 minutes of no activity (default)\n idleCheckIntervalMinutes: 5, // Check for idle activity every 5 minutes (default)\n});\n```\n\n**How it works:**\n1. **Idle Detection**: Monitors CloudFront request metrics at configured intervals (default: every 5 minutes)\n2. **Auto-Stop**: Stops the EC2 instance after the configured idle timeout when no requests are detected\n3. **Static IP**: Allocates an Elastic IP to maintain a consistent public IP address across stop/start cycles\n4. **Manual Resume**: Users can manually start the instance via AWS Console or CLI when needed\n\n**Cost Savings Example:**\n- **Without auto-stop**: m7g.xlarge running 24/7 = ~$120/month\n- **With auto-stop** (8 hours/day, 5 days/week): ~$30/month\n- **Savings**: ~$90/month (75% reduction)\n\n**Additional costs:**\n- Elastic IP (allocated): ~$3.65/month\n- Lambda function (IdleMonitor): ~$0.10/month\n- EventBridge rule: Negligible\n- **Net savings**: ~$86/month per instance\n\n**Architecture Components:**\n- Elastic IP for consistent public addressing\n- EventBridge rule triggering idle monitoring at configured intervals\n- IdleMonitor Lambda function checking CloudWatch metrics for request activity\n- IdleMonitorEnabler custom resource ensuring monitoring only starts after installation completes\n- CloudWatch metrics from CloudFront distribution\n\n**Integration Testing:**\n\nThe stop-on-idle functionality includes comprehensive integration tests (`integ-tests/integ.stop-on-idle.ts`) that verify the complete workflow:\n\n1. **Phase 1 - Verify Auto-Stop**: Waits for the instance to automatically stop after the configured idle timeout\n2. **Phase 2 - Disable IdleMonitor**: Disables the EventBridge rule to prevent the instance from being stopped again during testing\n3. **Phase 3 - Start Instance**: Starts the stopped instance and waits for it to reach the running state\n4. **Phase 4 - Verify Login**: Confirms that VS Code Server is accessible through CloudFront after the instance has been restarted\n\nThis 4-phase test ensures that:\n- Idle detection works correctly based on CloudWatch metrics\n- Instance stops automatically when no activity is detected\n- Instance can be successfully restarted after being stopped\n- VS Code Server remains accessible after stop/start cycles\n- Elastic IP maintains connectivity across state changes\n\nRun integration tests with:\n```bash\nnpm run integ-test\n```\n\n## Solution Design\n\n<details>\n <summary>... if you're curious about click here for the details</summary>\n\n![vscode-server-solution-design](docs/img/vscode-server.drawio-min.png)\n\n</details>\n\n## Inspiration\nThis project was created based on the following inspiration\n\n- [vscode-on-ec2-for-prototyping](https://github.com/aws-samples/vscode-on-ec2-for-prototyping): as baseline, which unfortunately was outdated\n- [aws-terraform-dev-container](https://github.com/awslabs/aws-terraform-dev-container): as baseline for terraform, but unfortunately also outdated\n- [java-on-aws-workshop-ide-only.yaml](https://github.com/aws-samples/java-on-aws/blob/main/labs/unicorn-store/infrastructure/cfn/java-on-aws-workshop-ide-only.yaml): an already synthesized cloudformation stack, which used mostly python as the custom resources\n- [fleet-workshop-team-stack-self.json](https://static.us-east-1.prod.workshops.aws/public/cc4aa67e-5b7a-4df1-abf7-c42502899a25/assets/fleet-workshop-team-stack-self.json): also an already synthesized cloudformation stack, which did much more as I currently implemented here.\n- [eks-workshop-vscode-cfn.yaml](https://github.com/aws-samples/eks-workshop-v2/blob/main/lab/cfn/eks-workshop-vscode-cfn.yaml): another great baseline\n\n\n## ๐Ÿš€ Unlock the Full Potential of Your AWS Cloud Infrastructure\n\nHi, Iโ€™m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. With **MV Consulting**, I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.\n\n---\n\n### ๐ŸŒŸ Why Work With Me?\n\nโœ”๏ธ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.\nโœ”๏ธ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.\nโœ”๏ธ **Cloud-Native Focus:** I specialize in modern, cloud-native systems that embrace the full potential of AWS.\nโœ”๏ธ **Business-Driven Tech:** Technology should serve your business, not the other way around.\n\n---\n\n### ๐Ÿ›  What I Bring to the Table\n\n๐Ÿ”‘ **12x AWS Certifications**\nIโ€™m **AWS Certified Solutions Architect and DevOps โ€“ Professional** and hold numerous additional certifications, so you can trust Iโ€™ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)\n\nโš™๏ธ **Infrastructure as Code (IaC)**\nWith deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.\n\n๐Ÿ“ฆ **DevOps Expertise**\nFrom CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.\n\n๐ŸŒ **Hands-On Experience**\nWith over **7 years of AWS experience** and a decade in the tech world, Iโ€™ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)\n\n---\n\n### ๐Ÿ’ผ Letโ€™s Build Something Great Together\n\nI know that choosing the right partner is critical to your success. When you work with me, youโ€™re not just contracting an engineer โ€“ youโ€™re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.\n\nโœ”๏ธ **Direct Collaboration**: No middlemen or red tape โ€“ you work with me directly.\nโœ”๏ธ **Transparent Process**: Expect open communication, clear timelines, and visible results.\nโœ”๏ธ **Real Value**: My solutions focus on delivering measurable impact for your business.\n\n\n<a href=\"https://tinyurl.com/mvc-15min\"><img alt=\"Schedule your call\" src=\"https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge\"/></a>\n\n---\n\n## ๐Ÿ™Œ Acknowledgements\n\nBig shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!\nTheir groundbreaking work simplifies cloud infrastructure projects and inspires us every day. ๐Ÿ’ก\n\n## Author\n\n[Manuel Vogel](https://manuel-vogel.de/about/)\n\n[![](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/manuel-vogel)\n[![](https://img.shields.io/badge/GitHub-2b3137?style=for-the-badge&logo=github&logoColor=white)](https://github.com/mavogel)"
4105
+ "markdown": "![Source](https://img.shields.io/github/stars/MV-Consulting/cdk-vscode-server?logo=github&label=GitHub%20Stars)\n[![Build Status](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml/badge.svg)](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml)\n[![ESLint Code Formatting](https://img.shields.io/badge/code_style-eslint-brightgreen.svg)](https://eslint.org)\n[![Latest release](https://img.shields.io/github/release/MV-Consulting/cdk-vscode-server.svg)](https://github.com/MV-Consulting/cdk-vscode-server/releases)\n![GitHub](https://img.shields.io/github/license/MV-Consulting/cdk-vscode-server)\n[![npm](https://img.shields.io/npm/dt/@mavogel/cdk-vscode-server?label=npm&color=orange)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n[![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n\n# cdk-vscode-server\n\nRunning your dev IDE vscode on AWS for development and workshop purposes.\n\n> [!Note]\n> This construct is designed for workshop purposes and does not fulfill all security and authentication best practices.\n\n![EXPERIMENTAL](https://img.shields.io/badge/stability-experimantal-orange?style=for-the-badge)**<br>This is an early version of the package. The API will change while I\nwe implement new features. Therefore make sure you use an exact version in your `package.json` before it reaches 1.0.0.**\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n - [Standard](#Standard)\n - [Pre-populate with Git Repository](#pre-populate-with-git-repository)\n - [Custom Domain Configuration](#custom-domain-configuration)\n - [Auto-Stop Configuration](#auto-stop-configuration)\n - [Custom Installation Steps](#custom-installation-steps)\n- [Solution Design](#solution-design)\n- [Inspiration](#inspiration)\n\n## Features\n\n- โšก **Quick Setup**: Spin up and configure your [vscode](https://code.visualstudio.com/) server in under 10 minutes in your AWS account\n- ๐Ÿ“ **Best Practice Setup**: Set up with [projen](https://projen.io/) and a [single configuration file](./.projenrc.ts) to keep your changes centralized.\n- ๐Ÿคนโ€โ™‚๏ธ **Pre-installed packages**: Besides the [vscode](https://code.visualstudio.com/) server, other tools and software packages such as `git`, `docker`, `awscli` `nodejs` and `python` are pre-installed on the EC2 instance.\n- ๐ŸŒ **Custom Domain Support**: Use your own domain name with automatic ACM certificate creation and Route53 DNS configuration, or bring your existing certificate.\n- ๐Ÿ’ฐ **Auto-Stop**: Automatically stop EC2 instances after inactivity with Elastic IP retention - save up to 75% on costs for development environments.\n- ๐Ÿ”ง **Custom Install Steps**: Extend the standard installation with your own shell commands to install workshop-specific tools, configure environments, or run setup scripts.\n- ๐Ÿ—๏ธ **Extensibility**: Pass in properties to the construct, which start with `additional*`. They allow you to extend the configuration to your needs. There are more to come...\n\n## Usage\nActually we supported 2 modes:\n\n### Standard\nThe following steps get you started:\n\n1. Create a new `awscdk-app` via\n```bash\nnpx projen new awscdk-app-ts --package-manager=npm\n```\n3. Add `@mavogel/cdk-vscode-server` as a dependency to your project in the `.projenrc.ts` file\n4. Run `npx projen` to install it\n5. Add the following to the `src/main.ts` file:\n```ts\nimport { App, Stack, StackProps } from 'aws-cdk-lib';\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\nimport { Construct } from 'constructs';\nimport {\n LinuxArchitectureType,\n LinuxFlavorType,\n VSCodeServer\n} from '@mavogel/cdk-vscode-server';\n\nexport class MyStack extends Stack {\n constructor(scope: Construct, id: string, props: StackProps = {}) {\n super(scope, id, props);\n\n new VSCodeServer(this, 'vscode', {\n // for example (or simply use the defaults by not setting the properties)\n instanceVolumeSize: 8,\n instanceClass: ec2.InstanceClass.M7G,\n instanceSize: ec2.InstanceSize.LARGE,\n instanceOperatingSystem: LinuxFlavorType.UBUNTU_24,\n instanceCpuArchitecture: LinuxArchitectureType.ARM,\n\n // ๐Ÿ‘‡๐Ÿฝ or if you want to give the InstanceRole more permissions\n additionalInstanceRolePolicies: [\n new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'codebuild:*',\n ],\n resources: [\n `arn:aws:codebuild:*:${Stack.of(this).account}:*/*`,\n ],\n }),\n ]\n\n // and more... ๐Ÿ’ก\n });\n }\n}\n\nconst env = {\n account: '123456789912',\n region: 'eu-central-1',\n};\n\nconst app = new App();\nnew MyStack(app, 'vscode-server', { env });\napp.synth();\n```\n\nand deploy it\n```bash\nnpx projen build\nnpx projen deploy\n```\n\nwith the output\n```console\nโœจ Deployment time: 509.87s\n\nOutputs:\ndev.vscodedomainName6729AA39 = https://d1foo65bar4baz.cloudfront.net/?folder=/Workshop\ndev.vscodepassword64FBCA12 = foobarbaz\n```\n\nSee the [examples](./examples) folder for more inspiration.\n\n### Pre-populate with Git Repository\n\nClone a git repository into the VS Code Server's home folder during instance setup - perfect for workshops or development environments with starter code:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n // Clone a git repository into the home folder\n repoUrl: 'https://github.com/aws-samples/my-workshop-repo.git',\n\n // Optional: customize the home folder path (default: /Workshop)\n homeFolder: '/MyWorkshop',\n\n // Optional: specify VS Code user (default: vscode-user)\n vscodeUser: 'workshop-user',\n});\n```\n\n**What happens:**\n1. During instance setup, the specified git repository is cloned into the user's home folder\n2. VS Code Server opens with the repository already loaded and ready to use\n3. Participants can start coding immediately without manual git clone steps\n\n**Use cases:**\n- Workshop environments with pre-configured starter code\n- Development environments with boilerplate projects\n- Training sessions with example applications\n- Code review sessions with pre-loaded repositories\n\n**Repository requirements:**\n- Must be publicly accessible (no authentication required)\n- HTTPS URLs only (SSH git URLs are not supported)\n- Repository will be cloned using `git clone` during instance initialization\n\nFor complete examples, see [examples/](./examples).\n\n### Custom Domain Configuration\n\nYou can configure your VS Code Server with a custom domain name instead of using the default CloudFront domain. The construct supports three different configuration options:\n\n#### Option 1: Auto-create Certificate with DNS Validation\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456', // optional - will auto-discover if not provided\n autoCreateCertificate: true,\n});\n```\n\nThis will:\n- Create an ACM certificate in us-east-1 (required for CloudFront)\n- Validate the certificate using DNS validation\n- Create a Route53 A record pointing to the CloudFront distribution\n- Configure the CloudFront distribution with the custom domain\n\n#### Option 2: Use Existing Certificate\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456',\n certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',\n});\n```\n\n**Requirements:**\n- Certificate must be in us-east-1 region\n- Certificate must be validated and ready to use\n- Certificate must include the domain name\n\n#### Option 3: Default (No Custom Domain)\n```ts\nnew VSCodeServer(this, 'vscode', {\n // No domain configuration - uses CloudFront default domain\n});\n```\n\nFor complete examples, see [examples/custom-domain/main.ts](./examples/custom-domain/main.ts).\n\n6. Then open the domain name in your favorite browser and you'd see the following login screen:\n![vscode-server-ui-login](docs/img/vscode-server-ui-login-min.png)\n\n7. After entering the password, you are logged into VSCode and can start coding :tada:\n\n![vscode-server-ui](docs/img/vscode-server-ui-min.png)\n\n> [!Important]\n> There are issues with copy pasting into the VSCode terminal within the Firefox browser (2025-01-12)\n\n### Auto-Stop Configuration\n\nSave up to 75% on costs by automatically stopping EC2 instances when idle:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n enableAutoStop: true, // Enable auto-stop feature\n idleTimeoutMinutes: 30, // Stop after 30 minutes of no activity (default)\n idleCheckIntervalMinutes: 5, // Check for idle activity every 5 minutes (default)\n});\n```\n\n**How it works:**\n1. **Idle Detection**: Monitors CloudFront request metrics at configured intervals (default: every 5 minutes)\n2. **Auto-Stop**: Stops the EC2 instance after the configured idle timeout when no requests are detected\n3. **Static IP**: Allocates an Elastic IP to maintain a consistent public IP address across stop/start cycles\n4. **Manual Resume**: Users can manually start the instance via AWS Console or CLI when needed\n\n**Cost Savings Example:**\n- **Without auto-stop**: m7g.xlarge running 24/7 = ~$120/month\n- **With auto-stop** (8 hours/day, 5 days/week): ~$30/month\n- **Savings**: ~$90/month (75% reduction)\n\n**Additional costs:**\n- Elastic IP (allocated): ~$3.65/month\n- Lambda function (IdleMonitor): ~$0.10/month\n- EventBridge rule: Negligible\n- **Net savings**: ~$86/month per instance\n\n**Architecture Components:**\n- Elastic IP for consistent public addressing\n- EventBridge rule triggering idle monitoring at configured intervals\n- IdleMonitor Lambda function checking CloudWatch metrics for request activity\n- IdleMonitorEnabler custom resource ensuring monitoring only starts after installation completes\n- CloudWatch metrics from CloudFront distribution\n\n**Integration Testing:**\n\nThe stop-on-idle functionality includes comprehensive integration tests (`integ-tests/integ.stop-on-idle.ts`) that verify the complete workflow:\n\n1. **Phase 1 - Verify Auto-Stop**: Waits for the instance to automatically stop after the configured idle timeout\n2. **Phase 2 - Disable IdleMonitor**: Disables the EventBridge rule to prevent the instance from being stopped again during testing\n3. **Phase 3 - Start Instance**: Starts the stopped instance and waits for it to reach the running state\n4. **Phase 4 - Verify Login**: Confirms that VS Code Server is accessible through CloudFront after the instance has been restarted\n\nThis 4-phase test ensures that:\n- Idle detection works correctly based on CloudWatch metrics\n- Instance stops automatically when no activity is detected\n- Instance can be successfully restarted after being stopped\n- VS Code Server remains accessible after stop/start cycles\n- Elastic IP maintains connectivity across state changes\n\nRun integration tests with:\n```bash\nnpm run integ-test\n```\n\n### Custom Installation Steps\n\nExtend the standard VS Code Server installation with your own custom shell commands - perfect for installing workshop-specific tools, configuring development environments, or running setup scripts:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n // Add custom installation steps that run after standard setup\n customInstallSteps: [\n {\n name: 'InstallWorkshopTools',\n commands: [\n '#!/bin/bash',\n 'echo \"Installing workshop-specific tools\"',\n\n // Install additional software\n 'curl -fsSL https://get.docker.com | sh',\n 'usermod -aG docker ubuntu',\n\n // Configure environment\n 'echo \"export WORKSHOP_ENV=production\" >> /home/ubuntu/.bashrc',\n ],\n },\n {\n name: 'CloneStarterCode',\n commands: [\n '#!/bin/bash',\n 'cd /home/ubuntu',\n 'git clone https://github.com/my-org/workshop-starter.git',\n 'chown -R ubuntu:ubuntu workshop-starter',\n ],\n },\n ],\n});\n```\n\n**Key Features:**\n- **Execute After Standard Setup**: Custom steps run after VS Code Server installation completes\n- **Multiple Steps**: Add as many installation steps as needed, executed in order\n- **Full Shell Access**: Run any shell commands with root privileges\n- **Workshop-Friendly**: Pre-install tools, configure environments, or download starter code\n\n**Common Use Cases:**\n- Install additional development tools (Docker, kubectl, terraform)\n- Configure workshop-specific environments and credentials\n- Clone starter code repositories with specific permissions\n- Set up databases or services required for training\n- Download and prepare datasets or assets\n- Configure IDE extensions or settings\n\n**Supported Operating Systems:**\n- Ubuntu 22/24/25\n- Amazon Linux 2023\n\n**Requirements:**\n- Commands execute with root privileges during instance initialization\n- Use absolute paths or ensure proper working directory context\n- Consider idempotency if instance might be restarted\n- Commands run synchronously in the order specified\n\nFor complete examples, see [examples/custom-install-steps/main.ts](./examples/custom-install-steps/main.ts).\n\n## Solution Design\n\n<details>\n <summary>... if you're curious about click here for the details</summary>\n\n![vscode-server-solution-design](docs/img/vscode-server.drawio-min.png)\n\n</details>\n\n## Inspiration\nThis project was created based on the following inspiration\n\n- [vscode-on-ec2-for-prototyping](https://github.com/aws-samples/vscode-on-ec2-for-prototyping): as baseline, which unfortunately was outdated\n- [aws-terraform-dev-container](https://github.com/awslabs/aws-terraform-dev-container): as baseline for terraform, but unfortunately also outdated\n- [java-on-aws-workshop-ide-only.yaml](https://github.com/aws-samples/java-on-aws/blob/main/labs/unicorn-store/infrastructure/cfn/java-on-aws-workshop-ide-only.yaml): an already synthesized cloudformation stack, which used mostly python as the custom resources\n- [fleet-workshop-team-stack-self.json](https://static.us-east-1.prod.workshops.aws/public/cc4aa67e-5b7a-4df1-abf7-c42502899a25/assets/fleet-workshop-team-stack-self.json): also an already synthesized cloudformation stack, which did much more as I currently implemented here.\n- [eks-workshop-vscode-cfn.yaml](https://github.com/aws-samples/eks-workshop-v2/blob/main/lab/cfn/eks-workshop-vscode-cfn.yaml): another great baseline\n\n\n## ๐Ÿš€ Unlock the Full Potential of Your AWS Cloud Infrastructure\n\nHi, Iโ€™m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. With **MV Consulting**, I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.\n\n---\n\n### ๐ŸŒŸ Why Work With Me?\n\nโœ”๏ธ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.\nโœ”๏ธ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.\nโœ”๏ธ **Cloud-Native Focus:** I specialize in modern, cloud-native systems that embrace the full potential of AWS.\nโœ”๏ธ **Business-Driven Tech:** Technology should serve your business, not the other way around.\n\n---\n\n### ๐Ÿ›  What I Bring to the Table\n\n๐Ÿ”‘ **12x AWS Certifications**\nIโ€™m **AWS Certified Solutions Architect and DevOps โ€“ Professional** and hold numerous additional certifications, so you can trust Iโ€™ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)\n\nโš™๏ธ **Infrastructure as Code (IaC)**\nWith deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.\n\n๐Ÿ“ฆ **DevOps Expertise**\nFrom CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.\n\n๐ŸŒ **Hands-On Experience**\nWith over **7 years of AWS experience** and a decade in the tech world, Iโ€™ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)\n\n---\n\n### ๐Ÿ’ผ Letโ€™s Build Something Great Together\n\nI know that choosing the right partner is critical to your success. When you work with me, youโ€™re not just contracting an engineer โ€“ youโ€™re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.\n\nโœ”๏ธ **Direct Collaboration**: No middlemen or red tape โ€“ you work with me directly.\nโœ”๏ธ **Transparent Process**: Expect open communication, clear timelines, and visible results.\nโœ”๏ธ **Real Value**: My solutions focus on delivering measurable impact for your business.\n\n\n<a href=\"https://tinyurl.com/mvc-15min\"><img alt=\"Schedule your call\" src=\"https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge\"/></a>\n\n---\n\n## ๐Ÿ™Œ Acknowledgements\n\nBig shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!\nTheir groundbreaking work simplifies cloud infrastructure projects and inspires us every day. ๐Ÿ’ก\n\n## Author\n\n[Manuel Vogel](https://manuel-vogel.de/about/)\n\n[![](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/manuel-vogel)\n[![](https://img.shields.io/badge/GitHub-2b3137?style=for-the-badge&logo=github&logoColor=white)](https://github.com/mavogel)"
4106
4106
  },
4107
4107
  "repository": {
4108
4108
  "type": "git",
@@ -4115,10 +4115,67 @@
4115
4115
  },
4116
4116
  "python": {
4117
4117
  "distName": "cdk-vscode-server",
4118
- "module": "cdk-vscode-server"
4118
+ "module": "cdk_vscode_server"
4119
4119
  }
4120
4120
  },
4121
4121
  "types": {
4122
+ "@mavogel/cdk-vscode-server.CustomInstallStep": {
4123
+ "assembly": "@mavogel/cdk-vscode-server",
4124
+ "datatype": true,
4125
+ "docs": {
4126
+ "stability": "experimental",
4127
+ "summary": "Custom installation step for SSM document Allows users to extend the installer with additional shell commands."
4128
+ },
4129
+ "fqn": "@mavogel/cdk-vscode-server.CustomInstallStep",
4130
+ "kind": "interface",
4131
+ "locationInModule": {
4132
+ "filename": "src/vscode-server.ts",
4133
+ "line": 31
4134
+ },
4135
+ "name": "CustomInstallStep",
4136
+ "properties": [
4137
+ {
4138
+ "abstract": true,
4139
+ "docs": {
4140
+ "example": "['#!/bin/bash', 'echo \"Installing custom tool\"', 'apt-get install -y my-tool']",
4141
+ "stability": "experimental",
4142
+ "summary": "Shell commands to run for this step Each command will be executed in sequence."
4143
+ },
4144
+ "immutable": true,
4145
+ "locationInModule": {
4146
+ "filename": "src/vscode-server.ts",
4147
+ "line": 46
4148
+ },
4149
+ "name": "commands",
4150
+ "type": {
4151
+ "collection": {
4152
+ "elementtype": {
4153
+ "primitive": "string"
4154
+ },
4155
+ "kind": "array"
4156
+ }
4157
+ }
4158
+ },
4159
+ {
4160
+ "abstract": true,
4161
+ "docs": {
4162
+ "example": "'InstallCustomTool'",
4163
+ "stability": "experimental",
4164
+ "summary": "Name of the installation step Must be unique within the SSM document."
4165
+ },
4166
+ "immutable": true,
4167
+ "locationInModule": {
4168
+ "filename": "src/vscode-server.ts",
4169
+ "line": 38
4170
+ },
4171
+ "name": "name",
4172
+ "type": {
4173
+ "primitive": "string"
4174
+ }
4175
+ }
4176
+ ],
4177
+ "symbolId": "src/vscode-server:CustomInstallStep"
4178
+ },
4122
4179
  "@mavogel/cdk-vscode-server.IdleMonitor": {
4123
4180
  "assembly": "@mavogel/cdk-vscode-server",
4124
4181
  "base": "constructs.Construct",
@@ -4309,7 +4366,7 @@
4309
4366
  "kind": "enum",
4310
4367
  "locationInModule": {
4311
4368
  "filename": "src/vscode-server.ts",
4312
- "line": 269
4369
+ "line": 324
4313
4370
  },
4314
4371
  "members": [
4315
4372
  {
@@ -4340,7 +4397,7 @@
4340
4397
  "kind": "enum",
4341
4398
  "locationInModule": {
4342
4399
  "filename": "src/vscode-server.ts",
4343
- "line": 244
4400
+ "line": 299
4344
4401
  },
4345
4402
  "members": [
4346
4403
  {
@@ -4389,7 +4446,7 @@
4389
4446
  },
4390
4447
  "locationInModule": {
4391
4448
  "filename": "src/vscode-server.ts",
4392
- "line": 305
4449
+ "line": 360
4393
4450
  },
4394
4451
  "parameters": [
4395
4452
  {
@@ -4416,7 +4473,7 @@
4416
4473
  "kind": "class",
4417
4474
  "locationInModule": {
4418
4475
  "filename": "src/vscode-server.ts",
4419
- "line": 284
4476
+ "line": 339
4420
4477
  },
4421
4478
  "name": "VSCodeServer",
4422
4479
  "properties": [
@@ -4428,7 +4485,7 @@
4428
4485
  "immutable": true,
4429
4486
  "locationInModule": {
4430
4487
  "filename": "src/vscode-server.ts",
4431
- "line": 288
4488
+ "line": 343
4432
4489
  },
4433
4490
  "name": "domainName",
4434
4491
  "type": {
@@ -4443,7 +4500,7 @@
4443
4500
  "immutable": true,
4444
4501
  "locationInModule": {
4445
4502
  "filename": "src/vscode-server.ts",
4446
- "line": 298
4503
+ "line": 353
4447
4504
  },
4448
4505
  "name": "instance",
4449
4506
  "type": {
@@ -4458,7 +4515,7 @@
4458
4515
  "immutable": true,
4459
4516
  "locationInModule": {
4460
4517
  "filename": "src/vscode-server.ts",
4461
- "line": 293
4518
+ "line": 348
4462
4519
  },
4463
4520
  "name": "password",
4464
4521
  "type": {
@@ -4473,7 +4530,7 @@
4473
4530
  "immutable": true,
4474
4531
  "locationInModule": {
4475
4532
  "filename": "src/vscode-server.ts",
4476
- "line": 303
4533
+ "line": 358
4477
4534
  },
4478
4535
  "name": "idleMonitor",
4479
4536
  "optional": true,
@@ -4495,7 +4552,7 @@
4495
4552
  "kind": "interface",
4496
4553
  "locationInModule": {
4497
4554
  "filename": "src/vscode-server.ts",
4498
- "line": 30
4555
+ "line": 52
4499
4556
  },
4500
4557
  "name": "VSCodeServerProps",
4501
4558
  "properties": [
@@ -4509,7 +4566,7 @@
4509
4566
  "immutable": true,
4510
4567
  "locationInModule": {
4511
4568
  "filename": "src/vscode-server.ts",
4512
- "line": 113
4569
+ "line": 135
4513
4570
  },
4514
4571
  "name": "additionalInstanceRolePolicies",
4515
4572
  "optional": true,
@@ -4532,7 +4589,7 @@
4532
4589
  "immutable": true,
4533
4590
  "locationInModule": {
4534
4591
  "filename": "src/vscode-server.ts",
4535
- "line": 120
4592
+ "line": 142
4536
4593
  },
4537
4594
  "name": "additionalTags",
4538
4595
  "optional": true,
@@ -4557,7 +4614,7 @@
4557
4614
  "immutable": true,
4558
4615
  "locationInModule": {
4559
4616
  "filename": "src/vscode-server.ts",
4560
- "line": 216
4617
+ "line": 238
4561
4618
  },
4562
4619
  "name": "assetZipS3Path",
4563
4620
  "optional": true,
@@ -4575,7 +4632,7 @@
4575
4632
  "immutable": true,
4576
4633
  "locationInModule": {
4577
4634
  "filename": "src/vscode-server.ts",
4578
- "line": 157
4635
+ "line": 179
4579
4636
  },
4580
4637
  "name": "autoCreateCertificate",
4581
4638
  "optional": true,
@@ -4595,7 +4652,7 @@
4595
4652
  "immutable": true,
4596
4653
  "locationInModule": {
4597
4654
  "filename": "src/vscode-server.ts",
4598
- "line": 227
4655
+ "line": 249
4599
4656
  },
4600
4657
  "name": "branchZipS3Path",
4601
4658
  "optional": true,
@@ -4613,7 +4670,7 @@
4613
4670
  "immutable": true,
4614
4671
  "locationInModule": {
4615
4672
  "filename": "src/vscode-server.ts",
4616
- "line": 147
4673
+ "line": 169
4617
4674
  },
4618
4675
  "name": "certificateArn",
4619
4676
  "optional": true,
@@ -4621,6 +4678,31 @@
4621
4678
  "primitive": "string"
4622
4679
  }
4623
4680
  },
4681
+ {
4682
+ "abstract": true,
4683
+ "docs": {
4684
+ "default": "- no custom installation steps",
4685
+ "example": "customInstallSteps: [\n {\n name: 'InstallCustomTool',\n commands: [\n '#!/bin/bash',\n 'echo \"Installing my custom tool\"',\n 'curl -O https://example.com/tool.sh',\n 'bash tool.sh',\n ],\n },\n {\n name: 'ConfigureWorkshopEnv',\n commands: [\n '#!/bin/bash',\n 'echo \"export MY_VAR=value\" >> /home/participant/.bashrc',\n ],\n },\n]",
4686
+ "remarks": "Allows you to add additional shell commands that run after the standard installation steps.\nUseful for installing workshop-specific tools, configuring custom environments, or running\nsetup scripts.\n\nEach step will be executed in the order provided, after all standard installation steps complete.",
4687
+ "stability": "experimental",
4688
+ "summary": "Custom installation steps to extend the SSM document."
4689
+ },
4690
+ "immutable": true,
4691
+ "locationInModule": {
4692
+ "filename": "src/vscode-server.ts",
4693
+ "line": 293
4694
+ },
4695
+ "name": "customInstallSteps",
4696
+ "optional": true,
4697
+ "type": {
4698
+ "collection": {
4699
+ "elementtype": {
4700
+ "fqn": "@mavogel/cdk-vscode-server.CustomInstallStep"
4701
+ },
4702
+ "kind": "array"
4703
+ }
4704
+ }
4705
+ },
4624
4706
  {
4625
4707
  "abstract": true,
4626
4708
  "docs": {
@@ -4631,7 +4713,7 @@
4631
4713
  "immutable": true,
4632
4714
  "locationInModule": {
4633
4715
  "filename": "src/vscode-server.ts",
4634
- "line": 99
4716
+ "line": 121
4635
4717
  },
4636
4718
  "name": "devServerBasePath",
4637
4719
  "optional": true,
@@ -4649,7 +4731,7 @@
4649
4731
  "immutable": true,
4650
4732
  "locationInModule": {
4651
4733
  "filename": "src/vscode-server.ts",
4652
- "line": 106
4734
+ "line": 128
4653
4735
  },
4654
4736
  "name": "devServerPort",
4655
4737
  "optional": true,
@@ -4667,7 +4749,7 @@
4667
4749
  "immutable": true,
4668
4750
  "locationInModule": {
4669
4751
  "filename": "src/vscode-server.ts",
4670
- "line": 129
4752
+ "line": 151
4671
4753
  },
4672
4754
  "name": "domainName",
4673
4755
  "optional": true,
@@ -4685,7 +4767,7 @@
4685
4767
  "immutable": true,
4686
4768
  "locationInModule": {
4687
4769
  "filename": "src/vscode-server.ts",
4688
- "line": 165
4770
+ "line": 187
4689
4771
  },
4690
4772
  "name": "enableAutoStop",
4691
4773
  "optional": true,
@@ -4705,7 +4787,7 @@
4705
4787
  "immutable": true,
4706
4788
  "locationInModule": {
4707
4789
  "filename": "src/vscode-server.ts",
4708
- "line": 238
4790
+ "line": 260
4709
4791
  },
4710
4792
  "name": "folderZipS3Path",
4711
4793
  "optional": true,
@@ -4723,7 +4805,7 @@
4723
4805
  "immutable": true,
4724
4806
  "locationInModule": {
4725
4807
  "filename": "src/vscode-server.ts",
4726
- "line": 92
4808
+ "line": 114
4727
4809
  },
4728
4810
  "name": "homeFolder",
4729
4811
  "optional": true,
@@ -4741,7 +4823,7 @@
4741
4823
  "immutable": true,
4742
4824
  "locationInModule": {
4743
4825
  "filename": "src/vscode-server.ts",
4744
- "line": 138
4826
+ "line": 160
4745
4827
  },
4746
4828
  "name": "hostedZoneId",
4747
4829
  "optional": true,
@@ -4759,7 +4841,7 @@
4759
4841
  "immutable": true,
4760
4842
  "locationInModule": {
4761
4843
  "filename": "src/vscode-server.ts",
4762
- "line": 181
4844
+ "line": 203
4763
4845
  },
4764
4846
  "name": "idleCheckIntervalMinutes",
4765
4847
  "optional": true,
@@ -4777,7 +4859,7 @@
4777
4859
  "immutable": true,
4778
4860
  "locationInModule": {
4779
4861
  "filename": "src/vscode-server.ts",
4780
- "line": 173
4862
+ "line": 195
4781
4863
  },
4782
4864
  "name": "idleTimeoutMinutes",
4783
4865
  "optional": true,
@@ -4795,7 +4877,7 @@
4795
4877
  "immutable": true,
4796
4878
  "locationInModule": {
4797
4879
  "filename": "src/vscode-server.ts",
4798
- "line": 64
4880
+ "line": 86
4799
4881
  },
4800
4882
  "name": "instanceClass",
4801
4883
  "optional": true,
@@ -4813,7 +4895,7 @@
4813
4895
  "immutable": true,
4814
4896
  "locationInModule": {
4815
4897
  "filename": "src/vscode-server.ts",
4816
- "line": 85
4898
+ "line": 107
4817
4899
  },
4818
4900
  "name": "instanceCpuArchitecture",
4819
4901
  "optional": true,
@@ -4831,7 +4913,7 @@
4831
4913
  "immutable": true,
4832
4914
  "locationInModule": {
4833
4915
  "filename": "src/vscode-server.ts",
4834
- "line": 50
4916
+ "line": 72
4835
4917
  },
4836
4918
  "name": "instanceName",
4837
4919
  "optional": true,
@@ -4849,7 +4931,7 @@
4849
4931
  "immutable": true,
4850
4932
  "locationInModule": {
4851
4933
  "filename": "src/vscode-server.ts",
4852
- "line": 78
4934
+ "line": 100
4853
4935
  },
4854
4936
  "name": "instanceOperatingSystem",
4855
4937
  "optional": true,
@@ -4867,7 +4949,7 @@
4867
4949
  "immutable": true,
4868
4950
  "locationInModule": {
4869
4951
  "filename": "src/vscode-server.ts",
4870
- "line": 71
4952
+ "line": 93
4871
4953
  },
4872
4954
  "name": "instanceSize",
4873
4955
  "optional": true,
@@ -4885,7 +4967,7 @@
4885
4967
  "immutable": true,
4886
4968
  "locationInModule": {
4887
4969
  "filename": "src/vscode-server.ts",
4888
- "line": 57
4970
+ "line": 79
4889
4971
  },
4890
4972
  "name": "instanceVolumeSize",
4891
4973
  "optional": true,
@@ -4905,7 +4987,7 @@
4905
4987
  "immutable": true,
4906
4988
  "locationInModule": {
4907
4989
  "filename": "src/vscode-server.ts",
4908
- "line": 205
4990
+ "line": 227
4909
4991
  },
4910
4992
  "name": "repoUrl",
4911
4993
  "optional": true,
@@ -4924,7 +5006,7 @@
4924
5006
  "immutable": true,
4925
5007
  "locationInModule": {
4926
5008
  "filename": "src/vscode-server.ts",
4927
- "line": 194
5009
+ "line": 216
4928
5010
  },
4929
5011
  "name": "skipStatusChecks",
4930
5012
  "optional": true,
@@ -4942,7 +5024,7 @@
4942
5024
  "immutable": true,
4943
5025
  "locationInModule": {
4944
5026
  "filename": "src/vscode-server.ts",
4945
- "line": 43
5027
+ "line": 65
4946
5028
  },
4947
5029
  "name": "vscodePassword",
4948
5030
  "optional": true,
@@ -4960,7 +5042,7 @@
4960
5042
  "immutable": true,
4961
5043
  "locationInModule": {
4962
5044
  "filename": "src/vscode-server.ts",
4963
- "line": 36
5045
+ "line": 58
4964
5046
  },
4965
5047
  "name": "vscodeUser",
4966
5048
  "optional": true,
@@ -4972,6 +5054,6 @@
4972
5054
  "symbolId": "src/vscode-server:VSCodeServerProps"
4973
5055
  }
4974
5056
  },
4975
- "version": "0.0.64",
4976
- "fingerprint": "3BRi+GN6i44q+cFPoBqPuFqBcUPFx0g3BHIvuo4ciaM="
5057
+ "version": "0.0.66",
5058
+ "fingerprint": "2m3lRN9OAX6gqVbnVlWcun4tv6f6ZBr2k5Rr1zemQI0="
4977
5059
  }