From 932e99c0a9922aafd0a28092f63e3829a93e2615 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Wed, 9 Jul 2025 05:27:46 -0600 Subject: [PATCH] Add build script and update package dependencies for CDK deployment --- build.sh | 17 +++++ infrastructure/web-stack.ts | 122 ++++++++++++++++++++---------------- package-lock.json | 97 +++++++++++++++++++++++----- package.json | 11 ++-- 4 files changed, 172 insertions(+), 75 deletions(-) create mode 100644 build.sh diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..d004fe24 --- /dev/null +++ b/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +REGION=${AWS_DEFAULT_REGION:-me-central-1} +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +STACK_NAME=SyncrowWebStack +CERTIFICATE_ARN="arn:aws:acm:us-east-1:$ACCOUNT_ID:certificate/b3ea57be-9bf0-4c66-8b01-9672ef1e8530" + +echo "🧱 Building Flutter Web for PRODUCTION..." +flutter build web --target=lib/main.dart --release + +echo "🚀 Deploying CDK stack..." +npx cdk deploy $STACK_NAME \ + --context certificateArn=$CERTIFICATE_ARN \ + --require-approval never + +echo "✅ Deployment complete. Access the app at: https://app.syncrow.me" diff --git a/infrastructure/web-stack.ts b/infrastructure/web-stack.ts index 5453ce5e..25f98896 100644 --- a/infrastructure/web-stack.ts +++ b/infrastructure/web-stack.ts @@ -1,12 +1,12 @@ -import * as cdk from 'aws-cdk-lib'; -import * as s3 from 'aws-cdk-lib/aws-s3'; -import * as cloudfront from 'aws-cdk-lib/aws-cloudfront'; -import * as origins from 'aws-cdk-lib/aws-cloudfront-origins'; -import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment'; -import * as acm from 'aws-cdk-lib/aws-certificatemanager'; -import * as route53 from 'aws-cdk-lib/aws-route53'; -import * as targets from 'aws-cdk-lib/aws-route53-targets'; -import { Construct } from 'constructs'; +import * as cdk from "aws-cdk-lib"; +import * as acm from "aws-cdk-lib/aws-certificatemanager"; +import * as cloudfront from "aws-cdk-lib/aws-cloudfront"; +import * as origins from "aws-cdk-lib/aws-cloudfront-origins"; +import * as route53 from "aws-cdk-lib/aws-route53"; +import * as targets from "aws-cdk-lib/aws-route53-targets"; +import * as s3 from "aws-cdk-lib/aws-s3"; +import * as s3deploy from "aws-cdk-lib/aws-s3-deployment"; +import { Construct } from "constructs"; export interface WebStackProps extends cdk.StackProps { certificateArn?: string; @@ -21,10 +21,10 @@ export class WebStack extends cdk.Stack { const bucketName = `syncrow-web-${this.account}-${this.region}`; - const webBucket = new s3.Bucket(this, 'SyncrowWebBucket', { + const webBucket = new s3.Bucket(this, "SyncrowWebBucket", { bucketName, - websiteIndexDocument: 'index.html', - websiteErrorDocument: 'index.html', + websiteIndexDocument: "index.html", + websiteErrorDocument: "index.html", publicReadAccess: true, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ACLS, removalPolicy: cdk.RemovalPolicy.DESTROY, @@ -32,77 +32,91 @@ export class WebStack extends cdk.Stack { }); // Use existing wildcard certificate in us-east-1 (required for CloudFront) - const webCertificate = props?.certificateArn - ? acm.Certificate.fromCertificateArn(this, 'WildcardCertificate', props.certificateArn) - : acm.Certificate.fromCertificateArn(this, 'WildcardCertificate', - 'arn:aws:acm:us-east-1:482311766496:certificate/b3ea57be-9bf0-4c66-8b01-9672ef1e8530'); + const webCertificate = props?.certificateArn + ? acm.Certificate.fromCertificateArn( + this, + "WildcardCertificate", + props.certificateArn + ) + : acm.Certificate.fromCertificateArn( + this, + "WildcardCertificate", + "arn:aws:acm:us-east-1:482311766496:certificate/b3ea57be-9bf0-4c66-8b01-9672ef1e8530" + ); // Get the hosted zone - const hostedZone = route53.HostedZone.fromLookup(this, 'SyncrowZone', { - domainName: 'syncrow.me', + const hostedZone = route53.HostedZone.fromLookup(this, "SyncrowZone", { + domainName: "syncrow.me", }); - const distribution = new cloudfront.Distribution(this, 'SyncrowWebDistribution', { - defaultBehavior: { - origin: new origins.S3Origin(webBucket), - viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, - }, - domainNames: ['app.syncrow.me'], - certificate: webCertificate, - defaultRootObject: 'index.html', - errorResponses: [ - { - httpStatus: 404, - responseHttpStatus: 200, - responsePagePath: '/index.html', + const distribution = new cloudfront.Distribution( + this, + "SyncrowWebDistribution", + { + defaultBehavior: { + origin: new origins.S3Origin(webBucket), + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, }, - { - httpStatus: 403, - responseHttpStatus: 200, - responsePagePath: '/index.html', - }, - ], - }); + domainNames: ["app.syncrow.me"], + certificate: webCertificate, + defaultRootObject: "index.html", + errorResponses: [ + { + httpStatus: 404, + responseHttpStatus: 200, + responsePagePath: "/index.html", + }, + { + httpStatus: 403, + responseHttpStatus: 200, + responsePagePath: "/index.html", + }, + ], + } + ); // Create Route 53 record for app.syncrow.me - new route53.ARecord(this, 'WebAliasRecord', { + new route53.ARecord(this, "WebAliasRecord", { zone: hostedZone, - recordName: 'app', - target: route53.RecordTarget.fromAlias(new targets.CloudFrontTarget(distribution)), + recordName: "app", + target: route53.RecordTarget.fromAlias( + new targets.CloudFrontTarget(distribution) + ), }); - new s3deploy.BucketDeployment(this, 'SyncrowWebDeployment', { - sources: [s3deploy.Source.asset('./build/web')], + new s3deploy.BucketDeployment(this, "SyncrowWebDeployment", { + sources: [s3deploy.Source.asset("./build/web")], destinationBucket: webBucket, distribution, - distributionPaths: ['/*'], + distributionPaths: ["/*"], }); - this.distributionUrl = 'https://app.syncrow.me'; + this.distributionUrl = "https://app.syncrow.me"; this.bucketName = bucketName; - new cdk.CfnOutput(this, 'WebsiteUrl', { + new cdk.CfnOutput(this, "WebsiteUrl", { value: this.distributionUrl, - description: 'Web Application URL', + description: "Web Application URL", exportName: `${this.stackName}-WebsiteUrl`, }); - new cdk.CfnOutput(this, 'CloudFrontUrl', { + new cdk.CfnOutput(this, "CloudFrontUrl", { value: `https://${distribution.distributionDomainName}`, - description: 'CloudFront Distribution URL', + description: "CloudFront Distribution URL", exportName: `${this.stackName}-CloudFrontUrl`, }); - new cdk.CfnOutput(this, 'BucketName', { + new cdk.CfnOutput(this, "BucketName", { value: this.bucketName, - description: 'S3 Bucket Name', + description: "S3 Bucket Name", exportName: `${this.stackName}-BucketName`, }); - new cdk.CfnOutput(this, 'WildcardCertificateArn', { + new cdk.CfnOutput(this, "WildcardCertificateArn", { value: webCertificate.certificateArn, - description: 'Wildcard SSL Certificate ARN (us-east-1)', + description: "Wildcard SSL Certificate ARN (us-east-1)", exportName: `${this.stackName}-WildcardCertificateArn`, }); } diff --git a/package-lock.json b/package-lock.json index 7f692577..0a012471 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,34 +9,39 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@types/node": "^24.0.3", - "aws-cdk-lib": "^2.202.0", + "source-map-support": "^0.5.21" + }, + "devDependencies": { + "@types/node": "^24.0.12", + "aws-cdk-lib": "^2.204.0", "constructs": "^10.4.2", - "source-map-support": "^0.5.21", "ts-node": "^10.9.2", "typescript": "^5.8.3" } }, "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.240", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.240.tgz", - "integrity": "sha512-Ry5yvGVf8s7j1Gf1aBFs0mBnWzRkkRtgSVpRGkDWXvZoPbRODAH33S1mAxkETNb+dNnTPGE2Gvws0XbhpJ6RzA==", + "version": "2.2.242", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.242.tgz", + "integrity": "sha512-4c1bAy2ISzcdKXYS1k4HYZsNrgiwbiDzj36ybwFVxEWZXVAP0dimQTCaB9fxu7sWzEjw3d+eaw6Fon+QTfTIpQ==", + "dev": true, "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==", + "dev": true, "license": "Apache-2.0" }, "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "44.7.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-44.7.0.tgz", - "integrity": "sha512-dRC3Xo5AKAMLWrPpseYPqxP5NPc4yqd2eOoai9TmhWxaxd2PKYfuTbgQeJsA56Ml9ntHmnKkJmJNg2ACpsDtEQ==", + "version": "45.2.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-45.2.0.tgz", + "integrity": "sha512-5TTUkGHQ+nfuUGwKA8/Yraxb+JdNUh4np24qk/VHXmrCMq+M6HfmGWfhcg/QlHA2S5P3YIamfYHdQAB4uSNLAg==", "bundleDependencies": [ "jsonschema", "semver" ], + "dev": true, "license": "Apache-2.0", "dependencies": { "jsonschema": "~1.4.1", @@ -48,6 +53,7 @@ }, "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { "version": "1.4.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -56,6 +62,7 @@ }, "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { "version": "7.7.2", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -69,6 +76,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -81,6 +89,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -90,12 +99,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -106,30 +117,35 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", - "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "version": "24.0.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.12.tgz", + "integrity": "sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.8.0" @@ -139,6 +155,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -151,6 +168,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -163,12 +181,13 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/aws-cdk-lib": { - "version": "2.202.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.202.0.tgz", - "integrity": "sha512-JDycQoE8AxUAeCFXFoCx6FGvR78e6W9zYxPgmfW/uPPbntyNCXXBqwyAYo17RGS/lr0RO3zqD/oCBZSNU2e/Yg==", + "version": "2.204.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.204.0.tgz", + "integrity": "sha512-mY3nYu+QvPhO+fz+LCFKbc0PFhTHbHzDLnbcA2fPcQBKciYnTixpBd2ccRlKYWbG4y6NTc6ju6DudZ3HIS4OlA==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -182,11 +201,12 @@ "yaml", "mime-types" ], + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/asset-awscli-v1": "2.2.240", + "@aws-cdk/asset-awscli-v1": "2.2.242", "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^44.2.0", + "@aws-cdk/cloud-assembly-schema": "^45.0.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.3.0", @@ -208,11 +228,13 @@ }, "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/aws-cdk-lib/node_modules/ajv": { "version": "8.17.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -228,6 +250,7 @@ }, "node_modules/aws-cdk-lib/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -236,6 +259,7 @@ }, "node_modules/aws-cdk-lib/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -250,6 +274,7 @@ }, "node_modules/aws-cdk-lib/node_modules/astral-regex": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -258,11 +283,13 @@ }, "node_modules/aws-cdk-lib/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/brace-expansion": { "version": "1.1.12", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -272,6 +299,7 @@ }, "node_modules/aws-cdk-lib/node_modules/case": { "version": "1.6.3", + "dev": true, "inBundle": true, "license": "(MIT OR GPL-3.0-or-later)", "engines": { @@ -280,6 +308,7 @@ }, "node_modules/aws-cdk-lib/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -291,26 +320,31 @@ }, "node_modules/aws-cdk-lib/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/concat-map": { "version": "0.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { "version": "3.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/fast-uri": { "version": "3.0.6", + "dev": true, "funding": [ { "type": "github", @@ -326,6 +360,7 @@ }, "node_modules/aws-cdk-lib/node_modules/fs-extra": { "version": "11.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -339,11 +374,13 @@ }, "node_modules/aws-cdk-lib/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/aws-cdk-lib/node_modules/ignore": { "version": "5.3.2", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -352,6 +389,7 @@ }, "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -360,11 +398,13 @@ }, "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/jsonfile": { "version": "6.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -376,6 +416,7 @@ }, "node_modules/aws-cdk-lib/node_modules/jsonschema": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -384,11 +425,13 @@ }, "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/mime-db": { "version": "1.52.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -397,6 +440,7 @@ }, "node_modules/aws-cdk-lib/node_modules/mime-types": { "version": "2.1.35", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -408,6 +452,7 @@ }, "node_modules/aws-cdk-lib/node_modules/minimatch": { "version": "3.1.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -419,6 +464,7 @@ }, "node_modules/aws-cdk-lib/node_modules/punycode": { "version": "2.3.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -427,6 +473,7 @@ }, "node_modules/aws-cdk-lib/node_modules/require-from-string": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -435,6 +482,7 @@ }, "node_modules/aws-cdk-lib/node_modules/semver": { "version": "7.7.2", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -446,6 +494,7 @@ }, "node_modules/aws-cdk-lib/node_modules/slice-ansi": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -462,6 +511,7 @@ }, "node_modules/aws-cdk-lib/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -475,6 +525,7 @@ }, "node_modules/aws-cdk-lib/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -486,6 +537,7 @@ }, "node_modules/aws-cdk-lib/node_modules/table": { "version": "6.9.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "dependencies": { @@ -501,6 +553,7 @@ }, "node_modules/aws-cdk-lib/node_modules/universalify": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -509,6 +562,7 @@ }, "node_modules/aws-cdk-lib/node_modules/yaml": { "version": "1.10.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -525,18 +579,21 @@ "version": "10.4.2", "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.2.tgz", "integrity": "sha512-wsNxBlAott2qg8Zv87q3eYZYgheb9lchtBfjHzzLHtXbttwSrHPs1NNQbBrmbb1YZvYg2+Vh0Dor76w4mFxJkA==", + "dev": true, "license": "Apache-2.0" }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, "license": "MIT" }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -546,6 +603,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/source-map": { @@ -571,6 +629,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -614,6 +673,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -627,18 +687,21 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index 693d7f38..cfb0a243 100644 --- a/package.json +++ b/package.json @@ -9,17 +9,20 @@ "build:flutter": "flutter pub get && flutter build web --release", "cdk": "cdk", "infra:deploy": "npm run build:flutter && cdk deploy SyncrowWebStack", - "infra:destroy": "cdk destroy SyncrowWebStack" + "infra:destroy": "cdk destroy SyncrowWebStack", + "infra:build": "bash build.sh" }, "keywords": [], "author": "", "license": "ISC", "description": "CDK infrastructure for Syncrow Web Application", "dependencies": { - "@types/node": "^24.0.3", - "aws-cdk-lib": "^2.202.0", + "source-map-support": "^0.5.21" + }, + "devDependencies": { + "@types/node": "^24.0.12", + "aws-cdk-lib": "^2.204.0", "constructs": "^10.4.2", - "source-map-support": "^0.5.21", "ts-node": "^10.9.2", "typescript": "^5.8.3" }