diff --git a/.github/workflows/cloud-deploy-preview.yml b/.github/workflows/cloud-deploy-preview_reusable.yml similarity index 73% rename from .github/workflows/cloud-deploy-preview.yml rename to .github/workflows/cloud-deploy-preview_reusable.yml index a24f9f00d5..e0cb024565 100644 --- a/.github/workflows/cloud-deploy-preview.yml +++ b/.github/workflows/cloud-deploy-preview_reusable.yml @@ -5,6 +5,10 @@ name: "[Cloud] Preview Deploy" on: workflow_call: inputs: + project: + required: true + type: string + description: "The project to deploy" baseRef: required: true type: string @@ -12,7 +16,7 @@ on: defaults: run: - working-directory: ./cloud/infrastructure + working-directory: ./infra jobs: build-and-preview: @@ -24,10 +28,10 @@ jobs: - name: ✋ Set up mutex id: mutex-setup run: | - pushd ../../discrete/Signalco.Discrete.Api.Mutex/node-cli + pushd ../discrete/Signalco.Discrete.Api.Mutex/node-cli npm install npm install -g - npx mutex wait signalcocloudpreview + npx mutex wait signalcoinfrapreview${{ inputs.project }} popd - name: ✨ Setup DotNet @@ -45,7 +49,7 @@ jobs: with: node-version: "20.x" cache: pnpm - cache-dependency-path: ./cloud/infrastructure + cache-dependency-path: ./infra - name: 📦️ Installing dependencies run: pnpm i --frozen-lockfile @@ -63,12 +67,15 @@ jobs: env: BASE_BRANCH: ${{ inputs.baseRef }} + - name: ⚒️ Build Infrastructure + run: pnpm build + - name: ⚡ Preview Deploy Infrastructure uses: pulumi/actions@v4 with: command: preview - stack-name: signalco/cloud-primary/${{ steps.extract_branch.outputs.stack }} - work-dir: ./cloud/infrastructure + stack-name: signalco/${{ inputs.project }}/${{ steps.extract_branch.outputs.stack }} + work-dir: ./infra/apps/${{ inputs.project }} comment-on-pr: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -77,8 +84,8 @@ jobs: - name: ✋ Release mutex if: always() && steps.mutex-setup.outcome == 'success' run: | - pushd ../../discrete/Signalco.Discrete.Api.Mutex/node-cli + pushd ../discrete/Signalco.Discrete.Api.Mutex/node-cli npm install npm install -g - npx mutex release signalcocloudpreview + npx mutex release signalcoinfrapreview${{ inputs.project }} popd diff --git a/.github/workflows/cloud-deploy.yml b/.github/workflows/cloud-deploy.yml index ffbbb13aad..c9d2814dce 100644 --- a/.github/workflows/cloud-deploy.yml +++ b/.github/workflows/cloud-deploy.yml @@ -7,7 +7,7 @@ on: branches: [main, next] paths: - "cloud/**" - - "infrastructure/**" + - "infra/**" - ".github/workflows/cloud-deploy.yml" env: @@ -15,7 +15,7 @@ env: defaults: run: - working-directory: ./cloud/infrastructure + working-directory: ./infra jobs: build-and-deploy: @@ -27,7 +27,7 @@ jobs: - name: ✋ Set up mutex id: mutex-setup run: | - pushd ../../discrete/Signalco.Discrete.Api.Mutex/node-cli + pushd ../discrete/Signalco.Discrete.Api.Mutex/node-cli npm install npm install -g npx mutex wait signalcoclouddeploy @@ -48,7 +48,7 @@ jobs: with: node-version: "20.x" cache: pnpm - cache-dependency-path: ./cloud/infrastructure + cache-dependency-path: ./infra - name: 📦️ Installing dependencies run: pnpm i --frozen-lockfile @@ -61,12 +61,25 @@ jobs: env: BASE_BRANCH: ${{ github.base_ref }} - - name: ⚡ Deploy Infrastructure + - name: ⚒️ Build Infrastructure + run: pnpm build + + - name: ⚡ Deploy signalco Infrastructure uses: pulumi/actions@v4 with: command: up stack-name: signalco/cloud-primary/${{ steps.extract_branch.outputs.branch }} - work-dir: ./cloud/infrastructure + work-dir: ./infra/apps/cloud-primary + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} + + - name: ⚡ Deploy uier Infrastructure + uses: pulumi/actions@v4 + with: + command: up + stack-name: signalco/uier/${{ steps.extract_branch.outputs.branch }} + work-dir: ./infra/apps/uier env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} @@ -74,7 +87,7 @@ jobs: - name: ✋ Release mutex if: always() && steps.mutex-setup.outcome == 'success' run: | - pushd ../../discrete/Signalco.Discrete.Api.Mutex/node-cli + pushd ../discrete/Signalco.Discrete.Api.Mutex/node-cli npm install npm install -g npx mutex release signalcoclouddeploy diff --git a/.github/workflows/web-nextjs_bundle_analysis.yml b/.github/workflows/web-nextjs_bundle_analysis.yml index af01b4ffbb..c97b378842 100644 --- a/.github/workflows/web-nextjs_bundle_analysis.yml +++ b/.github/workflows/web-nextjs_bundle_analysis.yml @@ -5,11 +5,12 @@ name: '[Web] CI' on: pull_request: paths: - - 'web/**' + - 'web/**' - 'cloud/**' + - 'infra/**' - '.github/workflows/web-nextjs_bundle_analysis.yml' - '.github/workflows/nextjs_bundle_analysis_reusable.yml' - - '.github/workflows/cloud-deploy-preview.yml' + - '.github/workflows/cloud-deploy-preview_reusable.yml' push: branches: - main @@ -17,17 +18,28 @@ on: paths: - 'web/**' - 'cloud/**' + - 'infra/**' - '.github/workflows/web-nextjs_bundle_analysis.yml' - '.github/workflows/nextjs_bundle_analysis_reusable.yml' - - '.github/workflows/cloud-deploy-preview.yml' + - '.github/workflows/cloud-deploy-preview_reusable.yml' workflow_dispatch: jobs: cloud_preview: name: "Cloud (preview)" - uses: ./.github/workflows/cloud-deploy-preview.yml + uses: ./.github/workflows/cloud-deploy-preview_reusable.yml if: success() && github.event_name == 'pull_request' with: + project: "cloud-primary" + baseRef: ${{ github.base_ref }} + secrets: inherit + + uier_infra_preview: + name: "uier infrastructure (preview)" + uses: ./.github/workflows/cloud-deploy-preview_reusable.yml + if: success() && github.event_name == 'pull_request' + with: + project: "uier" baseRef: ${{ github.base_ref }} secrets: inherit @@ -40,7 +52,7 @@ jobs: path: 'web/apps/blog' vercelProjectId: 'prj_VT7qOjkcEvkAsZH7MtSxWcVDWVpr' secrets: inherit - + analyze_app: name: "App" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml @@ -60,7 +72,7 @@ jobs: path: 'web/apps/brandgrab' vercelProjectId: 'prj_QHQO9V4WwYqlcpXNufZ4SU3Ryftx' secrets: inherit - + analyze_web: name: "Web" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml @@ -70,7 +82,7 @@ jobs: path: 'web/apps/web' vercelProjectId: 'prj_PYE8WwpynTfjD6rVMiCp7sZoCPYw' secrets: inherit - + analyze_slco: name: "slco" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..b58b603fea --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..03d9549ea8 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..d4eacc644b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/signalco.iml b/.idea/signalco.iml new file mode 100644 index 0000000000..6f3fd12e3b --- /dev/null +++ b/.idea/signalco.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/webResources.xml b/.idea/webResources.xml new file mode 100644 index 0000000000..9cd99dfe71 --- /dev/null +++ b/.idea/webResources.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index dd4d55b54c..0b82b05ceb 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,44 @@

- - - - signalco logotype - - + + + + signalco logotype + +

Automate your life.

- Getting Started • - Key Features • - Community • - Contributing • - Development + Getting Started • + Key Features • + Community • + Contributing • + Related • + License • + Sponsors

## Getting Started -Visit [https://www.signalco.io/learn](https://www.signalco.io/learn) to get started with Signalco. +Visit [www.signalco.io/learn](https://www.signalco.io/learn) to get started with Signalco. ## Key Features -- Minimalistic and Beautiful UI -- Smart home -- Internet Of Things -- Advanced automations +- Minimalistic and Beautiful overview of all your services and devices +- Advanced automations simplified +- Integrated with many Internet Of Things (IoT) devices +- Integrated with many online services ## Community _We are setting up community channels for all users... stay tuned._ -The Signalco community of developers can be found on [GitHub Discussions](https://github.com/signalco-io/signalco/discussions), where you can ask questions, voice ideas, and share your projects. +The Signalco community of developers can be found +on [GitHub Discussions](https://github.com/signalco-io/signalco/discussions), where you can ask questions, voice ideas, +and share your projects. -Our [Code of Conduct](https://github.com/signalco-io/signalco/blob/main/CODE_OF_CONDUCT.md) applies to all Signalco community channels. +Our [Code of Conduct](https://github.com/signalco-io/signalco/blob/main/CODE_OF_CONDUCT.md) applies to all Signalco +community channels. ## Contributing @@ -51,11 +56,24 @@ More info on development can be found in [Development](/DEVELOPMENT.md) document ## License -[GNU General Public License v3.0](LICENSE) +Project is licensed under [GNU General Public License v3.0](LICENSE). See [www.signalco.io/oss](https://www.signalco.io/oss) for more info. + +Some parts of this projects are licensed under (MIT license). These licenses are specified in project/package files and are not included in root license specified here [GNU General Public License v3.0](LICENSE). + +Other parts, that don't specify license, are licensed under [GNU General Public License v3.0](LICENSE). + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsignalco-io%2Fsignalco.svg?type=large&issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsignalco-io%2Fsignalco?ref=badge_large&issueType=license) ## Sponsors ✨ Many thanks to our sponsors! -![Microsoft for Startups](/docs/ms_startups.png) -![JetBrains](/docs/jb_beam.png) +### Current sponsors + +No current sponsors. [Become a sponsor](https://www.signalco.io/sponsor) and get your logo here with a link to your +site. + +#### Previous sponsors that helped us get started + +![Microsoft for Startups](/docs/sponsors/ms_startups.png) +![JetBrains](/docs/sponsors/jb_beam.png) diff --git a/THIRD_PARTY.md b/THIRD_PARTY.md new file mode 100644 index 0000000000..a76a23c8a6 --- /dev/null +++ b/THIRD_PARTY.md @@ -0,0 +1,7 @@ +- [FOSSA](https://fossa.com/) - FOSSA helps you manage your open source dependencies so you can ship more secure and robust code faster. +- [Vercel](https://vercel.com/) - Vercel combines the best developer experience with an obsessive focus on end-user performance. Our platform enables frontend teams to do their best work. +- [GitHub](https://github.com/) - GitHub is where over 65 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and features, power your CI/CD and DevOps workflows, and secure code before you commit it. +- [Microsoft Azure](https://azure.microsoft.com/) - Build, run and manage applications across multiple clouds, on-premises and at the edge, with the tools and frameworks of your choice. +- [PlanetScale](https://planetscale.com/) - PlanetScale is a database-as-a-service built on Vitess, the popular open source sharding system for MySQL. Our platform makes it easy to build, scale, and manage modern applications on MySQL. + +TODO: Populate list with all third party services used by Signalco. diff --git a/cloud/infrastructure/.eslintrc.json b/cloud/infrastructure/.eslintrc.json deleted file mode 100644 index d0c1090578..0000000000 --- a/cloud/infrastructure/.eslintrc.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "indent": [ - "error", - 4 - ], - "quotes": [ - "error", - "single" - ], - "comma-dangle": [ - "warn", - { - "arrays": "always-multiline", - "objects": "always-multiline", - "imports": "always-multiline", - "exports": "always-multiline", - "functions": "always-multiline" - } - ], - "semi": [ - "error", - "always" - ], - "import/no-unresolved": 0, - "import/no-absolute-path": 0 - } -} \ No newline at end of file diff --git a/cloud/infrastructure/.gitignore b/cloud/infrastructure/.gitignore deleted file mode 100644 index c6958891dd..0000000000 --- a/cloud/infrastructure/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/bin/ -/node_modules/ diff --git a/cloud/infrastructure/.vscode/settings.json b/cloud/infrastructure/.vscode/settings.json deleted file mode 100644 index 00ad71fba1..0000000000 --- a/cloud/infrastructure/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "typescript.tsdk": "node_modules\\typescript\\lib" -} \ No newline at end of file diff --git a/cloud/infrastructure/grap_next.json b/cloud/infrastructure/grap_next.json deleted file mode 100644 index baf95e87ce..0000000000 --- a/cloud/infrastructure/grap_next.json +++ /dev/null @@ -1,679 +0,0 @@ -strict digraph { - Resource0 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelsamsung"]; - Resource0 -> Resource1 [color = "#246C60", label = "value"]; - Resource0 -> Resource2 [color = "#246C60", label = "name"]; - Resource0 -> Resource3 [color = "#246C60", label = "resourceUri"]; - Resource0 -> Resource4 [color = "#246C60", label = "properties"]; - Resource0 -> Resource5 [color = "#246C60", label = "value"]; - Resource0 -> Resource6 [color = "#246C60", label = "name"]; - Resource0 -> Resource7 [color = "#AA6639"]; - Resource8 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelslack"]; - Resource8 -> Resource9 [color = "#246C60", label = "serverFarmId"]; - Resource8 -> Resource7 [color = "#AA6639"]; - Resource8 -> Resource10 [color = "#246C60", label = "serverFarmId"]; - Resource11 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelphilipshue"]; - Resource11 -> Resource7 [color = "#AA6639"]; - Resource12 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelgithubapp"]; - Resource12 -> Resource7 [color = "#AA6639"]; - Resource13 [label="urn:pulumi:next::cloud-primary::azure-native:app:ManagedEnvironment::env-rb"]; - Resource13 -> Resource14 [color = "#246C60", label = "managedEnvironmentId"]; - Resource13 -> Resource7 [color = "#AA6639"]; - Resource15 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelirobot"]; - Resource15 -> Resource7 [color = "#AA6639"]; - Resource7 [label="urn:pulumi:next::cloud-primary::pulumi:pulumi:Stack::cloud-primary-next"]; - Resource16 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cpub"]; - Resource16 -> Resource7 [color = "#AA6639"]; - Resource17 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelslack"]; - Resource17 -> Resource18 [color = "#246C60", label = "request"]; - Resource17 -> Resource7 [color = "#AA6639"]; - Resource19 [label="urn:pulumi:next::cloud-primary::azure-native:resources:ResourceGroup::signalco-discrete-next-mutex"]; - Resource19 -> Resource20 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource21 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource22 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource23 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource24 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource19 -> Resource25 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource7 [color = "#AA6639"]; - Resource19 -> Resource26 [color = "#246C60", label = "resourceGroupName"]; - Resource19 -> Resource27 [color = "#246C60", label = "resourceGroupName"]; - Resource26 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-mutex"]; - Resource26 -> Resource7 [color = "#AA6639"]; - Resource28 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-pubcpub"]; - Resource28 -> Resource7 [color = "#AA6639"]; - Resource29 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-cpub"]; - Resource29 -> Resource7 [color = "#AA6639"]; - Resource30 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelzigbee2mqtt"]; - Resource30 -> Resource7 [color = "#AA6639"]; - Resource31 [label="urn:pulumi:next::cloud-primary::pulumi:providers:command::default_0_8_0"]; - Resource32 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-cpub"]; - Resource32 -> Resource7 [color = "#AA6639"]; - Resource33 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cint-usageproc"]; - Resource33 -> Resource7 [color = "#AA6639"]; - Resource34 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-intcontactst"]; - Resource34 -> Resource7 [color = "#AA6639"]; - Resource35 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cint-migration"]; - Resource35 -> Resource7 [color = "#AA6639"]; - Resource36 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelirobot"]; - Resource36 -> Resource7 [color = "#AA6639"]; - Resource37 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-rbpub"]; - Resource37 -> Resource38 [color = "#246C60", label = "request"]; - Resource37 -> Resource7 [color = "#AA6639"]; - Resource39 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-intcontactst"]; - Resource39 -> Resource40 [color = "#246C60", label = "serverFarmId"]; - Resource39 -> Resource7 [color = "#AA6639"]; - Resource41 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelsamsung"]; - Resource41 -> Resource42 [color = "#246C60", label = "serverFarmId"]; - Resource41 -> Resource0 [color = "#246C60", label = "serverFarmId"]; - Resource41 -> Resource7 [color = "#AA6639"]; - Resource43 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelirobot"]; - Resource43 -> Resource7 [color = "#AA6639"]; - Resource44 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-cpub"]; - Resource44 -> Resource16 [color = "#246C60", label = "request"]; - Resource44 -> Resource7 [color = "#AA6639"]; - Resource10 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelslack"]; - Resource10 -> Resource7 [color = "#AA6639"]; - Resource45 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelzigbee2mqtt"]; - Resource45 -> Resource7 [color = "#AA6639"]; - Resource27 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-mutex"]; - Resource27 -> Resource7 [color = "#AA6639"]; - Resource46 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-dkim2"]; - Resource46 -> Resource7 [color = "#AA6639"]; - Resource47 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-rbpub"]; - Resource47 -> Resource7 [color = "#AA6639"]; - Resource48 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-intusageproc"]; - Resource48 -> Resource7 [color = "#AA6639"]; - Resource49 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-intcontactst"]; - Resource49 -> Resource50 [color = "#246C60", label = "properties"]; - Resource49 -> Resource7 [color = "#AA6639"]; - Resource51 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chsamsung"]; - Resource51 -> Resource2 [color = "#246C60", label = "properties"]; - Resource51 -> Resource7 [color = "#AA6639"]; - Resource52 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelgithubapp"]; - Resource52 -> Resource7 [color = "#AA6639"]; - Resource52 -> Resource53 [color = "#246C60", label = "serverFarmId"]; - Resource52 -> Resource54 [color = "#246C60", label = "serverFarmId"]; - Resource55 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelgithubapp"]; - Resource55 -> Resource7 [color = "#AA6639"]; - Resource56 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-spf"]; - Resource56 -> Resource7 [color = "#AA6639"]; - Resource57 [label="urn:pulumi:next::cloud-primary::azure-native:resources:ResourceGroup::signalco-cloud-next"]; - Resource57 -> Resource58 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource59 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource60 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource61 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource2 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource62 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource63 [color = "#246C60", label = "resourceGroupName, properties"]; - Resource57 -> Resource64 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource65 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource66 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource67 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource68 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource69 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource70 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource71 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource72 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource73 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource74 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource75 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource4 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource76 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource42 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource9 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource77 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource78 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource79 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource80 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource50 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource81 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource82 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource83 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource14 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource84 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource85 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource6 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource86 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource87 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource88 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource89 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource90 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource91 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource92 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource93 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource94 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource95 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource96 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource97 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource98 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource99 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource40 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource100 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource0 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource8 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource11 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource12 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource13 [color = "#246C60", label = "appLogsConfiguration, resourceGroupName"]; - Resource57 -> Resource15 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource28 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource29 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource32 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource36 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource30 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource39 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource41 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource10 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource49 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource51 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource52 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource7 [color = "#AA6639"]; - Resource57 -> Resource101 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource102 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource53 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource103 [color = "#246C60", label = "properties, resourceGroupName"]; - Resource57 -> Resource104 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource105 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource106 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource107 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource108 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource109 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource54 [color = "#246C60", label = "resourceGroupName"]; - Resource57 -> Resource110 [color = "#246C60", label = "resourceGroupName"]; - Resource101 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-intmigration"]; - Resource101 -> Resource81 [color = "#246C60", label = "properties"]; - Resource101 -> Resource7 [color = "#AA6639"]; - Resource111 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelzigbee2mqtt"]; - Resource111 -> Resource7 [color = "#AA6639"]; - Resource102 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelphilipshue"]; - Resource102 -> Resource7 [color = "#AA6639"]; - Resource53 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelgithubapp"]; - Resource53 -> Resource7 [color = "#AA6639"]; - Resource103 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-intmaintenan"]; - Resource103 -> Resource7 [color = "#AA6639"]; - Resource104 [label="urn:pulumi:next::cloud-primary::azure-native:operationalinsights:Workspace::loganalytics-log"]; - Resource104 -> Resource112 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource3 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource113 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource114 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource115 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource116 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource117 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource118 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource119 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource120 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource13 [color = "#246C60", label = "appLogsConfiguration"]; - Resource104 -> Resource34 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource48 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource55 [color = "#246C60", label = "workspaceId"]; - Resource104 -> Resource7 [color = "#AA6639"]; - Resource104 -> Resource121 [color = "#246C60", label = "workspaceId"]; - Resource105 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-inttimeentit"]; - Resource105 -> Resource65 [color = "#246C60", label = "properties"]; - Resource105 -> Resource7 [color = "#AA6639"]; - Resource122 [label="urn:pulumi:next::cloud-primary::aws:ses/mailFrom:MailFrom::ses-next-ses-mail-from"]; - Resource122 -> Resource56 [color = "#246C60", label = "name"]; - Resource122 -> Resource7 [color = "#AA6639"]; - Resource123 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-ui-docs"]; - Resource123 -> Resource7 [color = "#AA6639"]; - Resource124 [label="urn:pulumi:next::cloud-primary::pulumi:providers:docker::default_4_3_1"]; - Resource125 [label="urn:pulumi:next::cloud-primary::pulumi:pulumi:StackReference::signalco/cloud-primary/next"]; - Resource125 -> Resource61 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource70 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource6 [color = "#246C60", label = "thumbprint, sslState"]; - Resource125 -> Resource86 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource11 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource12 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource29 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource27 [color = "#246C60", label = "sslState, thumbprint"]; - Resource125 -> Resource7 [color = "#AA6639"]; - Resource125 -> Resource109 [color = "#246C60", label = "sslState, thumbprint"]; - Resource106 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-rbpub"]; - Resource106 -> Resource69 [color = "#246C60", label = "serverFarmId"]; - Resource106 -> Resource84 [color = "#246C60", label = "serverFarmId"]; - Resource106 -> Resource7 [color = "#AA6639"]; - Resource107 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-intmaintenan"]; - Resource107 -> Resource126 [color = "#246C60", label = "request"]; - Resource107 -> Resource4 [color = "#246C60", label = "properties"]; - Resource107 -> Resource119 [color = "#246C60", label = "resourceUri"]; - Resource107 -> Resource103 [color = "#246C60", label = "name"]; - Resource107 -> Resource7 [color = "#AA6639"]; - Resource108 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-intmigration"]; - Resource108 -> Resource112 [color = "#246C60", label = "resourceUri"]; - Resource108 -> Resource4 [color = "#246C60", label = "properties"]; - Resource108 -> Resource81 [color = "#246C60", label = "name"]; - Resource108 -> Resource35 [color = "#246C60", label = "request"]; - Resource108 -> Resource7 [color = "#AA6639"]; - Resource109 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelslack"]; - Resource109 -> Resource7 [color = "#AA6639"]; - Resource54 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelgithubapp"]; - Resource54 -> Resource127 [color = "#246C60", label = "value"]; - Resource54 -> Resource128 [color = "#246C60", label = "value"]; - Resource54 -> Resource4 [color = "#246C60", label = "properties"]; - Resource54 -> Resource99 [color = "#246C60", label = "name"]; - Resource54 -> Resource12 [color = "#246C60", label = "name"]; - Resource54 -> Resource55 [color = "#246C60", label = "resourceUri"]; - Resource54 -> Resource7 [color = "#AA6639"]; - Resource121 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-inttimeentit"]; - Resource121 -> Resource7 [color = "#AA6639"]; - Resource129 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelslack"]; - Resource129 -> Resource7 [color = "#AA6639"]; - Resource110 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelzigbee2mqtt"]; - Resource110 -> Resource7 [color = "#AA6639"]; - Resource130 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-brandgrab"]; - Resource130 -> Resource7 [color = "#AA6639"]; - Resource131 [label="urn:pulumi:next::cloud-primary::aws:iam/accessKey:AccessKey::ses-next-ses-access-key"]; - Resource131 -> Resource63 [color = "#246C60", label = "properties"]; - Resource131 -> Resource65 [color = "#246C60", label = "properties"]; - Resource131 -> Resource78 [color = "#246C60", label = "properties"]; - Resource131 -> Resource50 [color = "#246C60", label = "properties"]; - Resource131 -> Resource81 [color = "#246C60", label = "properties"]; - Resource131 -> Resource28 [color = "#246C60", label = "properties"]; - Resource131 -> Resource103 [color = "#246C60", label = "properties"]; - Resource131 -> Resource7 [color = "#AA6639"]; - Resource127 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelgithubapp"]; - Resource127 -> Resource7 [color = "#AA6639"]; - Resource127 -> Resource132 [color = "#246C60", label = "request"]; - Resource133 [label="urn:pulumi:next::cloud-primary::aws:ses/domainIdentity:DomainIdentity::ses-next-domainIdentity"]; - Resource133 -> Resource7 [color = "#AA6639"]; - Resource133 -> Resource63 [color = "#246C60", label = "properties"]; - Resource133 -> Resource65 [color = "#246C60", label = "properties"]; - Resource133 -> Resource78 [color = "#246C60", label = "properties"]; - Resource133 -> Resource50 [color = "#246C60", label = "properties"]; - Resource133 -> Resource81 [color = "#246C60", label = "properties"]; - Resource133 -> Resource134 [color = "#246C60", label = "domain"]; - Resource133 -> Resource28 [color = "#246C60", label = "properties"]; - Resource133 -> Resource103 [color = "#246C60", label = "properties"]; - Resource133 -> Resource122 [color = "#246C60", label = "domain, mailFromDomain"]; - Resource58 [label="urn:pulumi:next::cloud-primary::azure-native:keyvault:Secret::secret-kv-Slack--ClientId"]; - Resource58 -> Resource7 [color = "#AA6639"]; - Resource135 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-dkim0"]; - Resource135 -> Resource7 [color = "#AA6639"]; - Resource1 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelsamsung"]; - Resource1 -> Resource7 [color = "#AA6639"]; - Resource136 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelphilipshue"]; - Resource136 -> Resource7 [color = "#AA6639"]; - Resource137 [label="urn:pulumi:next::cloud-primary::pulumi:providers:aws::default_5_42_0"]; - Resource59 [label="urn:pulumi:next::cloud-primary::azure-native:keyvault:Secret::secret-kv-Slack--ClientSecret"]; - Resource59 -> Resource7 [color = "#AA6639"]; - Resource112 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-intmigration"]; - Resource112 -> Resource7 [color = "#AA6639"]; - Resource60 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelzigbee2mqtt"]; - Resource60 -> Resource7 [color = "#AA6639"]; - Resource60 -> Resource75 [color = "#246C60", label = "serverFarmId"]; - Resource60 -> Resource110 [color = "#246C60", label = "serverFarmId"]; - Resource61 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelzigbee2mqtt"]; - Resource61 -> Resource7 [color = "#AA6639"]; - Resource138 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelirobot"]; - Resource138 -> Resource7 [color = "#AA6639"]; - Resource20 [label="urn:pulumi:next::cloud-primary::azure-native:storage:BlobContainer::func-zips-mutexfuncs"]; - Resource20 -> Resource7 [color = "#AA6639"]; - Resource20 -> Resource24 [color = "#246C60", label = "properties"]; - Resource20 -> Resource25 [color = "#246C60", label = "containerName"]; - Resource139 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-ses-dmarc"]; - Resource139 -> Resource7 [color = "#AA6639"]; - Resource2 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelsamsung"]; - Resource2 -> Resource7 [color = "#AA6639"]; - Resource128 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelgithubapp"]; - Resource128 -> Resource7 [color = "#AA6639"]; - Resource62 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelslack"]; - Resource62 -> Resource7 [color = "#AA6639"]; - Resource63 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-pubrbpub"]; - Resource63 -> Resource7 [color = "#AA6639"]; - Resource64 [label="urn:pulumi:next::cloud-primary::azure-native:storage:StorageAccount::safuncs"]; - Resource64 -> Resource2 [color = "#246C60", label = "properties"]; - Resource64 -> Resource62 [color = "#246C60", label = "properties"]; - Resource64 -> Resource63 [color = "#246C60", label = "properties"]; - Resource64 -> Resource7 [color = "#AA6639"]; - Resource64 -> Resource65 [color = "#246C60", label = "properties"]; - Resource64 -> Resource66 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource67 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource71 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource77 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource78 [color = "#246C60", label = "properties"]; - Resource64 -> Resource80 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource50 [color = "#246C60", label = "properties"]; - Resource64 -> Resource81 [color = "#246C60", label = "properties"]; - Resource64 -> Resource83 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource85 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource89 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource91 [color = "#246C60", label = "properties"]; - Resource64 -> Resource92 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource95 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource99 [color = "#246C60", label = "properties"]; - Resource64 -> Resource15 [color = "#246C60", label = "properties"]; - Resource64 -> Resource28 [color = "#246C60", label = "properties"]; - Resource64 -> Resource30 [color = "#246C60", label = "properties"]; - Resource64 -> Resource49 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource51 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource101 [color = "#246C60", label = "accountName"]; - Resource64 -> Resource103 [color = "#246C60", label = "properties"]; - Resource64 -> Resource105 [color = "#246C60", label = "accountName"]; - Resource126 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cint-maintenan"]; - Resource126 -> Resource7 [color = "#AA6639"]; - Resource3 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelsamsung"]; - Resource3 -> Resource7 [color = "#AA6639"]; - Resource113 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelslack"]; - Resource113 -> Resource7 [color = "#AA6639"]; - Resource140 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-ses-mail-from-mx-record"]; - Resource140 -> Resource7 [color = "#AA6639"]; - Resource65 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-inttimeentit"]; - Resource65 -> Resource7 [color = "#AA6639"]; - Resource66 [label="urn:pulumi:next::cloud-primary::azure-native:storage:BlobContainer::func-zips-funcs"]; - Resource66 -> Resource2 [color = "#246C60", label = "properties"]; - Resource66 -> Resource62 [color = "#246C60", label = "properties"]; - Resource66 -> Resource63 [color = "#246C60", label = "properties"]; - Resource66 -> Resource65 [color = "#246C60", label = "properties"]; - Resource66 -> Resource7 [color = "#AA6639"]; - Resource66 -> Resource67 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource71 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource77 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource78 [color = "#246C60", label = "properties"]; - Resource66 -> Resource80 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource50 [color = "#246C60", label = "properties"]; - Resource66 -> Resource81 [color = "#246C60", label = "properties"]; - Resource66 -> Resource83 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource85 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource89 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource91 [color = "#246C60", label = "properties"]; - Resource66 -> Resource92 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource95 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource99 [color = "#246C60", label = "properties"]; - Resource66 -> Resource15 [color = "#246C60", label = "properties"]; - Resource66 -> Resource28 [color = "#246C60", label = "properties"]; - Resource66 -> Resource30 [color = "#246C60", label = "properties"]; - Resource66 -> Resource49 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource51 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource101 [color = "#246C60", label = "containerName"]; - Resource66 -> Resource103 [color = "#246C60", label = "properties"]; - Resource66 -> Resource105 [color = "#246C60", label = "containerName"]; - Resource141 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelsamsung"]; - Resource141 -> Resource7 [color = "#AA6639"]; - Resource114 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelphilipshue"]; - Resource114 -> Resource7 [color = "#AA6639"]; - Resource142 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelphilipshue"]; - Resource142 -> Resource136 [color = "#246C60", label = "request"]; - Resource142 -> Resource7 [color = "#AA6639"]; - Resource67 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chzigbee2mqtt"]; - Resource67 -> Resource7 [color = "#AA6639"]; - Resource67 -> Resource30 [color = "#246C60", label = "properties"]; - Resource21 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-mutex"]; - Resource21 -> Resource7 [color = "#AA6639"]; - Resource21 -> Resource22 [color = "#246C60", label = "serverFarmId"]; - Resource21 -> Resource26 [color = "#246C60", label = "serverFarmId"]; - Resource73 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelphilipshue"]; - Resource73 -> Resource114 [color = "#246C60", label = "resourceUri"]; - Resource73 -> Resource142 [color = "#246C60", label = "value"]; - Resource73 -> Resource7 [color = "#AA6639"]; - Resource73 -> Resource4 [color = "#246C60", label = "properties"]; - Resource73 -> Resource143 [color = "#246C60", label = "value"]; - Resource73 -> Resource91 [color = "#246C60", label = "name"]; - Resource73 -> Resource11 [color = "#246C60", label = "name"]; - Resource115 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelirobot"]; - Resource115 -> Resource7 [color = "#AA6639"]; - Resource68 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-cpub"]; - Resource68 -> Resource7 [color = "#AA6639"]; - Resource68 -> Resource74 [color = "#246C60", label = "serverFarmId"]; - Resource68 -> Resource32 [color = "#246C60", label = "serverFarmId"]; - Resource69 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-rbpub"]; - Resource69 -> Resource63 [color = "#246C60", label = "name"]; - Resource69 -> Resource7 [color = "#AA6639"]; - Resource69 -> Resource70 [color = "#246C60", label = "name"]; - Resource69 -> Resource4 [color = "#246C60", label = "properties"]; - Resource69 -> Resource120 [color = "#246C60", label = "resourceUri"]; - Resource69 -> Resource37 [color = "#246C60", label = "value"]; - Resource69 -> Resource47 [color = "#246C60", label = "value"]; - Resource70 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-rbpub"]; - Resource70 -> Resource7 [color = "#AA6639"]; - Resource71 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-cpub"]; - Resource71 -> Resource7 [color = "#AA6639"]; - Resource71 -> Resource28 [color = "#246C60", label = "properties"]; - Resource144 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cint-timeentit"]; - Resource144 -> Resource7 [color = "#AA6639"]; - Resource72 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-intmaintenan"]; - Resource72 -> Resource7 [color = "#AA6639"]; - Resource72 -> Resource107 [color = "#246C60", label = "serverFarmId"]; - Resource145 [label="urn:pulumi:next::cloud-primary::pulumi:providers:pulumi::default"]; - Resource74 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-cpub"]; - Resource74 -> Resource7 [color = "#AA6639"]; - Resource74 -> Resource4 [color = "#246C60", label = "properties"]; - Resource74 -> Resource117 [color = "#246C60", label = "resourceUri"]; - Resource74 -> Resource146 [color = "#246C60", label = "value"]; - Resource74 -> Resource28 [color = "#246C60", label = "name"]; - Resource74 -> Resource29 [color = "#246C60", label = "name"]; - Resource74 -> Resource44 [color = "#246C60", label = "value"]; - Resource75 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelzigbee2mqtt"]; - Resource75 -> Resource61 [color = "#246C60", label = "name"]; - Resource75 -> Resource7 [color = "#AA6639"]; - Resource75 -> Resource4 [color = "#246C60", label = "properties"]; - Resource75 -> Resource118 [color = "#246C60", label = "resourceUri"]; - Resource75 -> Resource147 [color = "#246C60", label = "value"]; - Resource75 -> Resource30 [color = "#246C60", label = "name"]; - Resource75 -> Resource45 [color = "#246C60", label = "value"]; - Resource132 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelgithubapp"]; - Resource132 -> Resource7 [color = "#AA6639"]; - Resource116 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-mutex"]; - Resource116 -> Resource7 [color = "#AA6639"]; - Resource4 [label="urn:pulumi:next::cloud-primary::azure-native:keyvault:Vault::vault-kv"]; - Resource4 -> Resource58 [color = "#246C60", label = "vaultName"]; - Resource4 -> Resource59 [color = "#246C60", label = "vaultName"]; - Resource4 -> Resource2 [color = "#246C60", label = "properties"]; - Resource4 -> Resource62 [color = "#246C60", label = "properties"]; - Resource4 -> Resource63 [color = "#246C60", label = "properties"]; - Resource4 -> Resource65 [color = "#246C60", label = "properties"]; - Resource4 -> Resource7 [color = "#AA6639"]; - Resource4 -> Resource78 [color = "#246C60", label = "properties"]; - Resource4 -> Resource50 [color = "#246C60", label = "properties"]; - Resource4 -> Resource81 [color = "#246C60", label = "properties"]; - Resource4 -> Resource90 [color = "#246C60", label = "vaultName"]; - Resource4 -> Resource91 [color = "#246C60", label = "properties"]; - Resource4 -> Resource98 [color = "#246C60", label = "vaultName"]; - Resource4 -> Resource99 [color = "#246C60", label = "properties"]; - Resource4 -> Resource15 [color = "#246C60", label = "properties"]; - Resource4 -> Resource28 [color = "#246C60", label = "properties"]; - Resource4 -> Resource30 [color = "#246C60", label = "properties"]; - Resource4 -> Resource103 [color = "#246C60", label = "properties"]; - Resource78 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-intusageproc"]; - Resource78 -> Resource7 [color = "#AA6639"]; - Resource117 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-cpub"]; - Resource117 -> Resource7 [color = "#AA6639"]; - Resource76 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-intmigration"]; - Resource76 -> Resource7 [color = "#AA6639"]; - Resource76 -> Resource108 [color = "#246C60", label = "serverFarmId"]; - Resource42 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-channelsamsung"]; - Resource42 -> Resource7 [color = "#AA6639"]; - Resource9 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelslack"]; - Resource9 -> Resource62 [color = "#246C60", label = "name"]; - Resource9 -> Resource113 [color = "#246C60", label = "resourceUri"]; - Resource9 -> Resource4 [color = "#246C60", label = "properties"]; - Resource9 -> Resource7 [color = "#AA6639"]; - Resource9 -> Resource17 [color = "#246C60", label = "value"]; - Resource9 -> Resource109 [color = "#246C60", label = "name"]; - Resource9 -> Resource129 [color = "#246C60", label = "value"]; - Resource77 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chphilipshue"]; - Resource77 -> Resource7 [color = "#AA6639"]; - Resource77 -> Resource91 [color = "#246C60", label = "properties"]; - Resource148 [label="urn:pulumi:next::cloud-primary::aws:iam/user:User::ses-next-usr"]; - Resource148 -> Resource7 [color = "#AA6639"]; - Resource148 -> Resource149 [color = "#246C60", label = "user"]; - Resource148 -> Resource131 [color = "#246C60", label = "user"]; - Resource79 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-intusageproc"]; - Resource79 -> Resource4 [color = "#246C60", label = "properties"]; - Resource79 -> Resource78 [color = "#246C60", label = "name"]; - Resource79 -> Resource7 [color = "#AA6639"]; - Resource79 -> Resource33 [color = "#246C60", label = "request"]; - Resource79 -> Resource48 [color = "#246C60", label = "resourceUri"]; - Resource5 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelsamsung"]; - Resource5 -> Resource141 [color = "#246C60", label = "request"]; - Resource5 -> Resource7 [color = "#AA6639"]; - Resource150 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-web"]; - Resource150 -> Resource7 [color = "#AA6639"]; - Resource151 [label="urn:pulumi:next::cloud-primary::pulumi:providers:azure-native::default_2_1_1"]; - Resource80 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-intmaintenan"]; - Resource80 -> Resource7 [color = "#AA6639"]; - Resource80 -> Resource103 [color = "#246C60", label = "properties"]; - Resource22 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-mutex"]; - Resource22 -> Resource116 [color = "#246C60", label = "resourceUri"]; - Resource22 -> Resource7 [color = "#AA6639"]; - Resource22 -> Resource152 [color = "#246C60", label = "value"]; - Resource22 -> Resource24 [color = "#246C60", label = "name"]; - Resource22 -> Resource153 [color = "#246C60", label = "value"]; - Resource22 -> Resource27 [color = "#246C60", label = "name"]; - Resource154 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-slco"]; - Resource154 -> Resource7 [color = "#AA6639"]; - Resource50 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-intcontactst"]; - Resource50 -> Resource7 [color = "#AA6639"]; - Resource81 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-intmigration"]; - Resource81 -> Resource7 [color = "#AA6639"]; - Resource14 [label="urn:pulumi:next::cloud-primary::azure-native:app:ContainerApp::docker-app-rb"]; - Resource14 -> Resource7 [color = "#AA6639"]; - Resource14 -> Resource90 [color = "#246C60", label = "properties"]; - Resource82 [label="urn:pulumi:next::cloud-primary::azure-native:signalrservice:SignalR::signalr-sr"]; - Resource82 -> Resource2 [color = "#246C60", label = "properties"]; - Resource82 -> Resource62 [color = "#246C60", label = "properties"]; - Resource82 -> Resource63 [color = "#246C60", label = "properties"]; - Resource82 -> Resource65 [color = "#246C60", label = "properties"]; - Resource82 -> Resource78 [color = "#246C60", label = "properties"]; - Resource82 -> Resource50 [color = "#246C60", label = "properties"]; - Resource82 -> Resource81 [color = "#246C60", label = "properties"]; - Resource82 -> Resource7 [color = "#AA6639"]; - Resource82 -> Resource155 [color = "#246C60", label = "request"]; - Resource82 -> Resource91 [color = "#246C60", label = "properties"]; - Resource82 -> Resource99 [color = "#246C60", label = "properties"]; - Resource82 -> Resource15 [color = "#246C60", label = "properties"]; - Resource82 -> Resource28 [color = "#246C60", label = "properties"]; - Resource82 -> Resource30 [color = "#246C60", label = "properties"]; - Resource82 -> Resource103 [color = "#246C60", label = "properties"]; - Resource156 [label="urn:pulumi:next::cloud-primary::pulumi:providers:checkly::default_1_1_4_github_/api.github.com/checkly"]; - Resource155 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-sr"]; - Resource155 -> Resource7 [color = "#AA6639"]; - Resource83 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chslack"]; - Resource83 -> Resource62 [color = "#246C60", label = "properties"]; - Resource83 -> Resource7 [color = "#AA6639"]; - Resource143 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-channelphilipshue"]; - Resource143 -> Resource7 [color = "#AA6639"]; - Resource23 [label="urn:pulumi:next::cloud-primary::azure-native:storage:StorageAccount::samutexfuncs"]; - Resource23 -> Resource20 [color = "#246C60", label = "accountName"]; - Resource23 -> Resource7 [color = "#AA6639"]; - Resource23 -> Resource24 [color = "#246C60", label = "properties"]; - Resource23 -> Resource25 [color = "#246C60", label = "accountName"]; - Resource157 [label="urn:pulumi:next::cloud-primary::pulumi:providers:cloudflare::default_5_7_0"]; - Resource84 [label="urn:pulumi:next::cloud-primary::azure-native:web:Certificate::func-cert-rbpub"]; - Resource84 -> Resource7 [color = "#AA6639"]; - Resource152 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-mutex"]; - Resource152 -> Resource7 [color = "#AA6639"]; - Resource158 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-app"]; - Resource158 -> Resource7 [color = "#AA6639"]; - Resource159 [label="urn:pulumi:next::cloud-primary::docker:index/image:Image::docker-image-rb"]; - Resource159 -> Resource14 [color = "#246C60", label = "template"]; - Resource159 -> Resource7 [color = "#AA6639"]; - Resource85 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-intusageproc"]; - Resource85 -> Resource78 [color = "#246C60", label = "properties"]; - Resource85 -> Resource7 [color = "#AA6639"]; - Resource160 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-cint-contactst"]; - Resource160 -> Resource7 [color = "#AA6639"]; - Resource6 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelsamsung"]; - Resource6 -> Resource7 [color = "#AA6639"]; - Resource18 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-channelslack"]; - Resource18 -> Resource7 [color = "#AA6639"]; - Resource38 [label="urn:pulumi:next::cloud-primary::checkly:index/check:Check::apicheck-rbpub"]; - Resource38 -> Resource7 [color = "#AA6639"]; - Resource118 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-channelzigbee2mqtt"]; - Resource118 -> Resource7 [color = "#AA6639"]; - Resource147 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelzigbee2mqtt"]; - Resource147 -> Resource7 [color = "#AA6639"]; - Resource147 -> Resource111 [color = "#246C60", label = "request"]; - Resource86 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppHostNameBinding::func-hostnamebind-channelirobot"]; - Resource86 -> Resource7 [color = "#AA6639"]; - Resource149 [label="urn:pulumi:next::cloud-primary::aws:iam/userPolicy:UserPolicy::ses-next-ses-policy"]; - Resource149 -> Resource7 [color = "#AA6639"]; - Resource161 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::ses-next-dkim1"]; - Resource161 -> Resource7 [color = "#AA6639"]; - Resource87 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-intusageproc"]; - Resource87 -> Resource79 [color = "#246C60", label = "serverFarmId"]; - Resource87 -> Resource7 [color = "#AA6639"]; - Resource88 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelphilipshue"]; - Resource88 -> Resource73 [color = "#246C60", label = "serverFarmId"]; - Resource88 -> Resource7 [color = "#AA6639"]; - Resource88 -> Resource102 [color = "#246C60", label = "serverFarmId"]; - Resource89 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chgithubapp"]; - Resource89 -> Resource7 [color = "#AA6639"]; - Resource89 -> Resource99 [color = "#246C60", label = "properties"]; - Resource90 [label="urn:pulumi:next::cloud-primary::azure-native:keyvault:Secret::secret-kv-SignalcoAppRemoteBrowserUrl"]; - Resource90 -> Resource7 [color = "#AA6639"]; - Resource91 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelphilipshue"]; - Resource91 -> Resource7 [color = "#AA6639"]; - Resource24 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-discretemutex"]; - Resource24 -> Resource7 [color = "#AA6639"]; - Resource92 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-rbpub"]; - Resource92 -> Resource63 [color = "#246C60", label = "properties"]; - Resource92 -> Resource7 [color = "#AA6639"]; - Resource119 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-intmaintenan"]; - Resource119 -> Resource7 [color = "#AA6639"]; - Resource93 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-channelirobot"]; - Resource93 -> Resource7 [color = "#AA6639"]; - Resource93 -> Resource97 [color = "#246C60", label = "serverFarmId"]; - Resource93 -> Resource36 [color = "#246C60", label = "serverFarmId"]; - Resource25 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-mutex"]; - Resource25 -> Resource24 [color = "#246C60", label = "properties"]; - Resource25 -> Resource7 [color = "#AA6639"]; - Resource94 [label="urn:pulumi:next::cloud-primary::azure-native:web:AppServicePlan::func-appplan-inttimeentit"]; - Resource94 -> Resource7 [color = "#AA6639"]; - Resource94 -> Resource100 [color = "#246C60", label = "serverFarmId"]; - Resource162 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-cname-channelirobot"]; - Resource162 -> Resource7 [color = "#AA6639"]; - Resource162 -> Resource43 [color = "#246C60", label = "request"]; - Resource95 [label="urn:pulumi:next::cloud-primary::azure-native:storage:Blob::zip-chirobot"]; - Resource95 -> Resource7 [color = "#AA6639"]; - Resource95 -> Resource15 [color = "#246C60", label = "properties"]; - Resource96 [label="urn:pulumi:next::cloud-primary::azure-native:storage:StorageAccount::sastore"]; - Resource96 -> Resource2 [color = "#246C60", label = "properties"]; - Resource96 -> Resource62 [color = "#246C60", label = "properties"]; - Resource96 -> Resource63 [color = "#246C60", label = "properties"]; - Resource96 -> Resource65 [color = "#246C60", label = "properties"]; - Resource96 -> Resource78 [color = "#246C60", label = "properties"]; - Resource96 -> Resource50 [color = "#246C60", label = "properties"]; - Resource96 -> Resource81 [color = "#246C60", label = "properties"]; - Resource96 -> Resource91 [color = "#246C60", label = "properties"]; - Resource96 -> Resource7 [color = "#AA6639"]; - Resource96 -> Resource99 [color = "#246C60", label = "properties"]; - Resource96 -> Resource15 [color = "#246C60", label = "properties"]; - Resource96 -> Resource28 [color = "#246C60", label = "properties"]; - Resource96 -> Resource30 [color = "#246C60", label = "properties"]; - Resource96 -> Resource103 [color = "#246C60", label = "properties"]; - Resource163 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::vercel-blog"]; - Resource163 -> Resource7 [color = "#AA6639"]; - Resource146 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-cpub"]; - Resource146 -> Resource7 [color = "#AA6639"]; - Resource97 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-channelirobot"]; - Resource97 -> Resource138 [color = "#246C60", label = "value"]; - Resource97 -> Resource115 [color = "#246C60", label = "resourceUri"]; - Resource97 -> Resource4 [color = "#246C60", label = "properties"]; - Resource97 -> Resource86 [color = "#246C60", label = "name"]; - Resource97 -> Resource162 [color = "#246C60", label = "value"]; - Resource97 -> Resource7 [color = "#AA6639"]; - Resource97 -> Resource15 [color = "#246C60", label = "name"]; - Resource98 [label="urn:pulumi:next::cloud-primary::azure-native:keyvault:Secret::secret-kv-Slack--SigningSecret"]; - Resource98 -> Resource7 [color = "#AA6639"]; - Resource99 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebAppApplicationSettings::func-appsettings-channelgithubapp"]; - Resource99 -> Resource7 [color = "#AA6639"]; - Resource40 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-intcontactst"]; - Resource40 -> Resource4 [color = "#246C60", label = "properties"]; - Resource40 -> Resource50 [color = "#246C60", label = "name"]; - Resource40 -> Resource160 [color = "#246C60", label = "request"]; - Resource40 -> Resource7 [color = "#AA6639"]; - Resource40 -> Resource34 [color = "#246C60", label = "resourceUri"]; - Resource153 [label="urn:pulumi:next::cloud-primary::cloudflare:index/record:Record::func-dns-txt-domainverify-mutex"]; - Resource153 -> Resource7 [color = "#AA6639"]; - Resource120 [label="urn:pulumi:next::cloud-primary::azure-native:insights:DiagnosticSetting::logs-diagnosticSetting-rbpub"]; - Resource120 -> Resource7 [color = "#AA6639"]; - Resource100 [label="urn:pulumi:next::cloud-primary::azure-native:web:WebApp::func-inttimeentit"]; - Resource100 -> Resource65 [color = "#246C60", label = "name"]; - Resource100 -> Resource144 [color = "#246C60", label = "request"]; - Resource100 -> Resource4 [color = "#246C60", label = "properties"]; - Resource100 -> Resource7 [color = "#AA6639"]; - Resource100 -> Resource121 [color = "#246C60", label = "resourceUri"]; - Resource134 [label="urn:pulumi:next::cloud-primary::aws:ses/domainDkim:DomainDkim::ses-next-sesDomainDkim"]; - Resource134 -> Resource135 [color = "#246C60", label = "name, value"]; - Resource134 -> Resource161 [color = "#246C60", label = "name, value"]; - Resource134 -> Resource7 [color = "#AA6639"]; - Resource134 -> Resource46 [color = "#246C60", label = "name, value"]; -} diff --git a/cloud/infrastructure/src/Azure/createInternalFunctionAsync.ts b/cloud/infrastructure/src/Azure/createInternalFunctionAsync.ts deleted file mode 100644 index c66a0a0d66..0000000000 --- a/cloud/infrastructure/src/Azure/createInternalFunctionAsync.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { createFunction } from './createFunction'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import publishProjectAsync from '../dotnet/publishProjectAsync'; -import { assignFunctionCodeAsync } from './assignFunctionCodeAsync'; -import apiStatusCheck from '../Checkly/apiStatusCheck'; -import { ConfInternalApiCheckInterval } from '../config'; -import { type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage'; - -const internalFunctionPrefix = 'cint'; - -export default async function createInternalFunctionAsync ( - resourceGroup: ResourceGroup, - name: string, - storageAccount: StorageAccount, - zipsContainer: BlobContainer, - shouldProtect: boolean) { - const shortName = name.substring(0, 9).toLocaleLowerCase(); - const func = createFunction( - resourceGroup, - `int${shortName}`, - shouldProtect, - false); - - const codePath = `../src/Signalco.Func.Internal.${name}`; - const publishResult = await publishProjectAsync(codePath); - - const code = await assignFunctionCodeAsync( - resourceGroup, - storageAccount, - zipsContainer, - `int${shortName}`, - publishResult.releaseDir); - apiStatusCheck(`${internalFunctionPrefix}-${shortName}`, `Internal - ${name}`, func.webApp.hostNames[0], ConfInternalApiCheckInterval); - return { - name, - shortName, - ...func, - ...code, - }; -} diff --git a/cloud/infrastructure/src/apps/createRemoteBrowser.ts b/cloud/infrastructure/src/apps/createRemoteBrowser.ts deleted file mode 100644 index b377c29a6a..0000000000 --- a/cloud/infrastructure/src/apps/createRemoteBrowser.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import { type ContainerRegistryResult } from '../Azure/containerRegistry'; -import createContainerApp from '../Azure/createContainerApp'; -import createManagedEnvironment from '../Azure/createManagedEnvironment'; -import createContainerImage from '../Azure/createContainerImage'; -import type createLogWorkspace from '../Azure/createLogWorkspace'; - -export default function createRemoteBrowser( - resourceGroup: ResourceGroup, - namePrefix: string, - registry: ContainerRegistryResult, - logWorkspace: ReturnType, - shouldProtect: boolean) { - const environment = createManagedEnvironment(resourceGroup, namePrefix, logWorkspace, shouldProtect); - const image = createContainerImage(registry, namePrefix, 'signalco-remote-browser', 'Signalco.Api.RemoteBrowser'); - const app = createContainerApp(resourceGroup, namePrefix, environment.managedEnvironment, registry, image.image, shouldProtect); - - return { - app, - }; -} \ No newline at end of file diff --git a/cloud/infrastructure/tools/restart-functions.js b/cloud/infrastructure/tools/restart-functions.js deleted file mode 100644 index 155e80bc94..0000000000 --- a/cloud/infrastructure/tools/restart-functions.js +++ /dev/null @@ -1,22 +0,0 @@ -const { exec } = require('node:child_process'); - -exec('pulumi stack output --json', (err, stdout, stderr) => { - if (err) { - console.error(err, stderr); - return; - } - - const output = JSON.parse(stdout); - const functionAppNames = output.functionApps; - const resourceGroupName = output.resourceGroupName; - for (const functionName of functionAppNames) { - console.log(`Restarting function: ${functionName}`); - exec(`az functionapp restart --name ${functionName} --resource-group ${resourceGroupName}`, (err, stdout, stderr) => { - if (err) { - console.error('Restarting function failed: ' + functionName, err, stderr); - return; - } - console.log('Restarted function: ' + functionName); - }); - } -}); diff --git a/cloud/infrastructure/tsconfig.json b/cloud/infrastructure/tsconfig.json deleted file mode 100644 index 08ce44ab63..0000000000 --- a/cloud/infrastructure/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "outDir": "bin", - "target": "ESNext", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "experimentalDecorators": true, - "pretty": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "forceConsistentCasingInFileNames": true - }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/docs/jb_beam.png b/docs/sponsors/jb_beam.png similarity index 100% rename from docs/jb_beam.png rename to docs/sponsors/jb_beam.png diff --git a/docs/ms_startups.png b/docs/sponsors/ms_startups.png similarity index 100% rename from docs/ms_startups.png rename to docs/sponsors/ms_startups.png diff --git a/infra/.eslintrc.js b/infra/.eslintrc.js new file mode 100644 index 0000000000..bf41d752d4 --- /dev/null +++ b/infra/.eslintrc.js @@ -0,0 +1,10 @@ +// This configuration only applies to the package manager root. +/** @type {import("eslint").Linter.Config} */ +module.exports = { + ignorePatterns: ["apps/**", "packages/**"], + extends: ["@infra/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, +}; diff --git a/infra/.gitignore b/infra/.gitignore new file mode 100644 index 0000000000..96fab4fed3 --- /dev/null +++ b/infra/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem diff --git a/infra/.idea/infra.iml b/infra/.idea/infra.iml new file mode 100644 index 0000000000..24643cc374 --- /dev/null +++ b/infra/.idea/infra.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/infra/.idea/modules.xml b/infra/.idea/modules.xml new file mode 100644 index 0000000000..a785a5366c --- /dev/null +++ b/infra/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/infra/.npmrc b/infra/.npmrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infra/.vscode/settings.json b/infra/.vscode/settings.json new file mode 100644 index 0000000000..44a73ec3a9 --- /dev/null +++ b/infra/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "eslint.workingDirectories": [ + { + "mode": "auto" + } + ] +} diff --git a/infra/README.md b/infra/README.md new file mode 100644 index 0000000000..7a4658aa87 --- /dev/null +++ b/infra/README.md @@ -0,0 +1,81 @@ +# Turborepo starter + +This is an official starter Turborepo. + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest +``` + +## What's inside? + +This Turborepo includes the following packages/apps: + +### Apps and Packages + +- `docs`: a [Next.js](https://nextjs.org/) app +- `web`: another [Next.js](https://nextjs.org/) app +- `@repo/ui`: a stub React component library shared by both `web` and `docs` applications +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +### Build + +To build all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm build +``` + +### Develop + +To develop all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm dev +``` + +### Remote Caching + +Turborepo can use a technique known as [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. + +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands: + +``` +cd my-turborepo +npx turbo login +``` + +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). + +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: + +``` +npx turbo link +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) +- [Caching](https://turbo.build/repo/docs/core-concepts/caching) +- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) +- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) +- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) +- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) diff --git a/infra/apps/cloud-primary/.eslintrc.cjs b/infra/apps/cloud-primary/.eslintrc.cjs new file mode 100644 index 0000000000..ac8a0bf66f --- /dev/null +++ b/infra/apps/cloud-primary/.eslintrc.cjs @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@infra/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "./tsconfig.json", + }, +}; \ No newline at end of file diff --git a/cloud/infrastructure/Pulumi.next.yaml b/infra/apps/cloud-primary/Pulumi.next.yaml similarity index 100% rename from cloud/infrastructure/Pulumi.next.yaml rename to infra/apps/cloud-primary/Pulumi.next.yaml diff --git a/cloud/infrastructure/Pulumi.production.yaml b/infra/apps/cloud-primary/Pulumi.production.yaml similarity index 100% rename from cloud/infrastructure/Pulumi.production.yaml rename to infra/apps/cloud-primary/Pulumi.production.yaml diff --git a/cloud/infrastructure/Pulumi.shared.yaml b/infra/apps/cloud-primary/Pulumi.shared.yaml similarity index 100% rename from cloud/infrastructure/Pulumi.shared.yaml rename to infra/apps/cloud-primary/Pulumi.shared.yaml diff --git a/cloud/infrastructure/Pulumi.yaml b/infra/apps/cloud-primary/Pulumi.yaml similarity index 100% rename from cloud/infrastructure/Pulumi.yaml rename to infra/apps/cloud-primary/Pulumi.yaml diff --git a/infra/apps/cloud-primary/package.json b/infra/apps/cloud-primary/package.json new file mode 100644 index 0000000000..7dd9cd57e8 --- /dev/null +++ b/infra/apps/cloud-primary/package.json @@ -0,0 +1,37 @@ +{ + "name": "@infra/signalco", + "private": true, + "license": "../LICENSE", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "scripts": { + "build": "tsc && tsup src/index.ts --format esm --clean", + "lint": "eslint ./src/**/*.ts", + "preview": "pulumi preview" + }, + "devDependencies": { + "@infra/pulumi": "workspace:*", + "@types/node": "20.10.5", + "@typescript-eslint/eslint-plugin": "6.15.0", + "@typescript-eslint/parser": "6.15.0", + "eslint": "8.56.0", + "eslint-config-standard": "17.1.0", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-n": "16.4.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "tsup": "8.0.1", + "typescript": "5.3.3" + }, + "dependencies": { + "@checkly/pulumi": "1.1.4", + "@pulumi/aws": "6.15.0", + "@pulumi/azure-native": "2.22.1", + "@pulumi/cloudflare": "5.16.0", + "@pulumi/command": "0.9.2", + "@pulumi/docker": "4.5.0", + "@pulumi/pulumi": "3.98.0", + "@pulumiverse/vercel": "1.0.1" + } +} \ No newline at end of file diff --git a/cloud/infrastructure/src/config.ts b/infra/apps/cloud-primary/src/config.ts similarity index 82% rename from cloud/infrastructure/src/config.ts rename to infra/apps/cloud-primary/src/config.ts index ec7e760b03..928b3b9fd7 100644 --- a/cloud/infrastructure/src/config.ts +++ b/infra/apps/cloud-primary/src/config.ts @@ -1,4 +1,4 @@ -import { CheckFrequency } from './Checkly/apiStatusCheck'; +import { CheckFrequency } from '@infra/pulumi/checkly'; // Monitoring intervals export const ConfChannelApiCheckInterval: CheckFrequency = 120; diff --git a/cloud/infrastructure/src/Azure/createChannelFunction.ts b/infra/apps/cloud-primary/src/createChannelFunction.ts similarity index 66% rename from cloud/infrastructure/src/Azure/createChannelFunction.ts rename to infra/apps/cloud-primary/src/createChannelFunction.ts index 4a582f03dc..c2e6567579 100644 --- a/cloud/infrastructure/src/Azure/createChannelFunction.ts +++ b/infra/apps/cloud-primary/src/createChannelFunction.ts @@ -1,19 +1,21 @@ import { type StackReference } from '@pulumi/pulumi'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import createPublicFunction from './createPublicFunction'; -import { assignFunctionCodeAsync } from './assignFunctionCodeAsync'; -import apiStatusCheck from '../Checkly/apiStatusCheck'; -import publishProjectAsync from '../dotnet/publishProjectAsync'; -import { ConfChannelApiCheckInterval } from '../config'; -import { type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { createPublicFunction, assignFunctionCodeAsync } from '@infra/pulumi/azure'; +import { apiStatusCheck } from '@infra/pulumi/checkly'; +import { publishProjectAsync } from '@infra/pulumi/dotnet'; +import { ConfChannelApiCheckInterval } from './config.js'; +import { type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage/index.js'; -export default async function createChannelFunctionAsync ( - channelName: string, - resourceGroup: ResourceGroup, +export async function createChannelFunction( + channelName: string, + resourceGroup: ResourceGroup, storageAccount: StorageAccount, zipsContainer: BlobContainer, currentStack: StackReference, - protect: boolean) { + protect: boolean): Promise<{ + nameLower: string, + name: string, + } & ReturnType & Awaited>> { const channelNameLower = channelName.toLocaleLowerCase(); const publicFunctionPrefix = 'channel' + channelNameLower; const publicFunctionStoragePrefix = 'ch' + channelNameLower; @@ -29,7 +31,7 @@ export default async function createChannelFunctionAsync ( protect, ); - const codePath = `../src/Signalco.Channel.${channelName}`; + const codePath = `../../../cloud/src/Signalco.Channel.${channelName}`; const publishResult = await publishProjectAsync(codePath); const channelFuncCode = await assignFunctionCodeAsync( diff --git a/infra/apps/cloud-primary/src/createInternalFunctionAsync.ts b/infra/apps/cloud-primary/src/createInternalFunctionAsync.ts new file mode 100644 index 0000000000..8a27e66280 --- /dev/null +++ b/infra/apps/cloud-primary/src/createInternalFunctionAsync.ts @@ -0,0 +1,42 @@ +import { createFunction, assignFunctionCodeAsync } from '@infra/pulumi/azure'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { publishProjectAsync } from '@infra/pulumi/dotnet'; +import { apiStatusCheck } from '@infra/pulumi/checkly'; +import { ConfInternalApiCheckInterval } from './config.js'; +import { type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage/index.js'; + +const internalFunctionPrefix = 'cint'; + +export async function createInternalFunctionAsync( + resourceGroup: ResourceGroup, + name: string, + storageAccount: StorageAccount, + zipsContainer: BlobContainer, + shouldProtect: boolean): Promise<{ + name: string, + shortName: string, + } & ReturnType & Awaited>> { + const shortName = name.substring(0, 9).toLocaleLowerCase(); + const func = createFunction( + resourceGroup, + `int${shortName}`, + shouldProtect, + false); + + const codePath = `../../../cloud/src/Signalco.Func.Internal.${name}`; + const publishResult = await publishProjectAsync(codePath); + + const code = await assignFunctionCodeAsync( + resourceGroup, + storageAccount, + zipsContainer, + `int${shortName}`, + publishResult.releaseDir); + apiStatusCheck(`${internalFunctionPrefix}-${shortName}`, `Internal - ${name}`, func.webApp.hostNames[0]!, ConfInternalApiCheckInterval); + return { + name, + shortName, + ...func, + ...code, + }; +} diff --git a/infra/apps/cloud-primary/src/createRemoteBrowser.ts b/infra/apps/cloud-primary/src/createRemoteBrowser.ts new file mode 100644 index 0000000000..82db73fbb1 --- /dev/null +++ b/infra/apps/cloud-primary/src/createRemoteBrowser.ts @@ -0,0 +1,18 @@ +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { type ContainerRegistryResult, type createLogWorkspace } from '@infra/pulumi/azure'; +import { createContainerApp, createManagedEnvironment, createContainerImage } from '@infra/pulumi/azure'; + +export function createRemoteBrowser( + resourceGroup: ResourceGroup, + namePrefix: string, + registry: ContainerRegistryResult, + logWorkspace: ReturnType, + shouldProtect: boolean): { app: ReturnType } { + const environment = createManagedEnvironment(resourceGroup, namePrefix, logWorkspace, shouldProtect); + const image = createContainerImage(registry, namePrefix, 'signalco-remote-browser', 'Signalco.Api.RemoteBrowser'); + const app = createContainerApp(resourceGroup, namePrefix, environment.managedEnvironment, registry, image.image, shouldProtect); + + return { + app, + }; +} \ No newline at end of file diff --git a/cloud/infrastructure/src/index.ts b/infra/apps/cloud-primary/src/index.ts similarity index 82% rename from cloud/infrastructure/src/index.ts rename to infra/apps/cloud-primary/src/index.ts index efe87b828b..bd69358ce2 100644 --- a/cloud/infrastructure/src/index.ts +++ b/infra/apps/cloud-primary/src/index.ts @@ -1,28 +1,30 @@ import { Config, getStack, interpolate, StackReference, getProject } from '@pulumi/pulumi'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; -import { createSignalR } from './Azure/createSignalR'; -import { createStorageAccount } from './Azure/createStorageAccount'; -import { createKeyVault } from './Azure/createKeyVault'; -import createPublicFunction from './Azure/createPublicFunction'; -import { webAppIdentity } from './Azure/webAppIdentity'; -import vaultSecret from './Azure/vaultSecret'; -import { assignFunctionCodeAsync } from './Azure/assignFunctionCodeAsync'; -import { assignFunctionSettings } from './Azure/assignFunctionSettings'; -import createSes from './AWS/createSes'; -import createInternalFunctionAsync from './Azure/createInternalFunctionAsync'; -import createChannelFunction from './Azure/createChannelFunction'; -import apiStatusCheck from './Checkly/apiStatusCheck'; -import dnsRecord from './CloudFlare/dnsRecord'; -import publishProjectAsync from './dotnet/publishProjectAsync'; -import { ConfCloudApiCheckInterval, ConfPublicSignalRCheckInterval } from './config'; -import createRemoteBrowser from './apps/createRemoteBrowser'; -import { createContainerRegistry, getContainerRegistry } from './Azure/containerRegistry'; -import createFunctionsStorage from './Azure/createFunctionsStorage'; -import { Dashboard } from '@checkly/pulumi/dashboard'; -import createLogWorkspace from './Azure/createLogWorkspace'; -import createAppInsights from './Azure/createAppInsights'; -import { nextJsApp } from './Vercel/nextJsApp'; -import { vercelApp } from './Vercel/vercelApp'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { + createSignalR, + createStorageAccount, + createKeyVault, + createPublicFunction, + webAppIdentity, + vaultSecret, + assignFunctionCodeAsync, + assignFunctionSettings, + createContainerRegistry, + getContainerRegistry, + createFunctionsStorage, + createLogWorkspace, + createAppInsights, +} from '@infra/pulumi/azure'; +import { createSes } from '@infra/pulumi/aws'; +import { apiStatusCheck } from '@infra/pulumi/checkly'; +import { dnsRecord } from '@infra/pulumi/cloudflare'; +import { publishProjectAsync } from '@infra/pulumi/dotnet'; +import { ConfCloudApiCheckInterval, ConfPublicSignalRCheckInterval } from './config.js'; +import { createRemoteBrowser } from './createRemoteBrowser.js'; +import { Dashboard } from '@checkly/pulumi'; +import { nextJsApp, vercelApp } from '@infra/pulumi/vercel'; +import { createChannelFunction } from './createChannelFunction.js'; +import { createInternalFunctionAsync } from './createInternalFunctionAsync.js'; /* * NOTE: `parent` configuration is currently disabled for all resources because @@ -32,7 +34,7 @@ import { vercelApp } from './Vercel/vercelApp'; * - this doesn't work in CI because az is not installed and authenticated */ -export = async () => { +const up = async () => { const resourceGroupSharedName = 'signalco-shared'; const containerRegistryName = 'signalco'; @@ -46,7 +48,7 @@ export = async () => { createContainerRegistry(resourceGroupShared, containerRegistryName, true); - return { }; + return {}; } else { const shouldProtect = stack === 'production'; const domainName = `${config.require('domain')}`; @@ -84,7 +86,7 @@ export = async () => { api.cors, currentStack, false); - const apiFuncPublish = await publishProjectAsync(['../src/Signalco.Api.Public', api.name].filter(i => i.length).join('.')); + const apiFuncPublish = await publishProjectAsync(['../../../cloud/src/Signalco.Api.Public', api.name].filter(i => i.length).join('.')); const apiFuncCode = await assignFunctionCodeAsync( resourceGroup, funcStorage.storageAccount.storageAccount, @@ -113,14 +115,14 @@ export = async () => { const channelNames = stack === 'production' ? productionChannelNames : [...productionChannelNames, ...nextChannelNames]; - const channelsFuncs = []; + const channelsFunctions = []; for (const channelName of channelNames) { - channelsFuncs.push(await createChannelFunction(channelName, resourceGroup, funcStorage.storageAccount.storageAccount, funcStorage.zipsContainer, currentStack, false)); + channelsFunctions.push(await createChannelFunction(channelName, resourceGroup, funcStorage.storageAccount.storageAccount, funcStorage.zipsContainer, currentStack, false)); } // Generate discrete functions const discreteNames = ['Mutex']; - const discreteFuncs = []; + const discreteFunctions = []; for (const funcName of discreteNames) { const discreteResourceGroup = new ResourceGroup(`signalco-discrete-${stack}-${funcName.toLowerCase()}`); const discreteStorage = createFunctionsStorage(discreteResourceGroup, `${funcName.toLowerCase().substring(0, 5)}funcs`, false); @@ -131,14 +133,14 @@ export = async () => { undefined, currentStack, false); - const funcPublish = await publishProjectAsync(`../../discrete/Signalco.Discrete.Api.${funcName}/cloud`, 7); + const funcPublish = await publishProjectAsync(`../../../discrete/Signalco.Discrete.Api.${funcName}/cloud`, 7); const funcCode = await assignFunctionCodeAsync( discreteResourceGroup, discreteStorage.storageAccount.storageAccount, discreteStorage.zipsContainer, funcName.toLowerCase().substring(0, 5), funcPublish.releaseDir); - discreteFuncs.push({ + discreteFunctions.push({ name: funcName, shortName: funcName.toLowerCase().substring(0, 5), resourceGroup: discreteResourceGroup, @@ -165,7 +167,7 @@ export = async () => { const vault = createKeyVault(resourceGroup, keyvaultPrefix, shouldProtect, [ ...publicFuncs.map(c => webAppIdentity(c.webApp)), ...internalFuncs.map(c => webAppIdentity(c.webApp)), - ...channelsFuncs.map(c => webAppIdentity(c.webApp)), + ...channelsFunctions.map(c => webAppIdentity(c.webApp)), ]); vaultSecret(resourceGroup, vault.keyVault, keyvaultPrefix, 'Slack--SigningSecret', config.requireSecret('secret-slackSigningSecret')); @@ -226,7 +228,7 @@ export = async () => { }); // Populate channel function settings - channelsFuncs.forEach(channel => { + channelsFunctions.forEach(channel => { assignFunctionSettings( resourceGroup, channel.webApp, @@ -241,7 +243,7 @@ export = async () => { }); // Populate discrete function settings - discreteFuncs.forEach(func => { + discreteFunctions.forEach(func => { assignFunctionSettings( func.resourceGroup, func.webApp, @@ -269,7 +271,7 @@ export = async () => { dnsRecord('checkly-public-dashboard', 'status', 'checkly-dashboards.com', 'CNAME', false); dnsRecord('checkly-public-dashboard-txt', '_vercel', 'vc-domain-verify=status.signalco.io,563d86cd3501b049a1ad', 'TXT', false); } - + // Vercel apps nextJsApp('signalco-blog', 'blog'); nextJsApp('signalco-app', 'app'); @@ -295,23 +297,25 @@ export = async () => { signalrUrl: signalr.signalr.hostName, internalFunctionUrls: internalFuncs.map(f => f.webApp.hostNames[0]), publicUrls: publicFuncs.map(c => c.dnsCname.hostname), - channelsUrls: channelsFuncs.map(c => c.dnsCname.hostname), + channelsUrls: channelsFunctions.map(c => c.dnsCname.hostname), appUrls: [ appRb.app.url, ], - discreteUrls: discreteFuncs.map(f => f.webApp.hostNames[0]), + discreteUrls: discreteFunctions.map(f => f.webApp.hostNames[0]), resourceGroupName: resourceGroup.name, functionApps: [ ...internalFuncs.map(c => c.webApp.name), ...publicFuncs.map(c => c.webApp.name), - ...channelsFuncs.map(c => c.webApp.name), - ...discreteFuncs.map(c => c.webApp.name), + ...channelsFunctions.map(c => c.webApp.name), + ...discreteFunctions.map(c => c.webApp.name), ], certs: [ - ...publicFuncs.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint})), - ...channelsFuncs.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint})), - ...discreteFuncs.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint})), + ...publicFuncs.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint })), + ...channelsFunctions.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint })), + ...discreteFunctions.map(f => ({ fullDomainName: f.fullDomainName, thumbprint: f.cert.thumbprint })), ], }; } }; + +export default up; diff --git a/infra/apps/cloud-primary/tsconfig.json b/infra/apps/cloud-primary/tsconfig.json new file mode 100644 index 0000000000..b2cb577cf5 --- /dev/null +++ b/infra/apps/cloud-primary/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@infra/typescript-config/app.json", + "parserOptions": { + "project": "./tsconfig.json" + }, + "include": [ + "./src/**/*.ts", + "./.eslintrc.cjs" + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/infra/apps/remote-browser/.eslintrc.cjs b/infra/apps/remote-browser/.eslintrc.cjs new file mode 100644 index 0000000000..ac8a0bf66f --- /dev/null +++ b/infra/apps/remote-browser/.eslintrc.cjs @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@infra/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "./tsconfig.json", + }, +}; \ No newline at end of file diff --git a/cloud/infrastructure/package.json b/infra/apps/remote-browser/package.json similarity index 61% rename from cloud/infrastructure/package.json rename to infra/apps/remote-browser/package.json index 6975b0d228..5528a3062e 100644 --- a/cloud/infrastructure/package.json +++ b/infra/apps/remote-browser/package.json @@ -1,32 +1,33 @@ { - "name": "cloud-primary", + "name": "@infra/remote-browser", "private": true, "license": "../LICENSE", "main": "src/index.ts", "scripts": { - "lint": "eslint ./src/**/*.ts", - "restart-functions": "node tools/restart-functions.js" + "lint": "eslint ./src/**/*.ts" }, "devDependencies": { - "@types/node": "20.10.4", - "@typescript-eslint/eslint-plugin": "6.14.0", - "@typescript-eslint/parser": "6.14.0", + "@infra/pulumi": "workspace:*", + "@types/node": "20.10.5", + "@typescript-eslint/eslint-plugin": "6.15.0", + "@typescript-eslint/parser": "6.15.0", "eslint": "8.56.0", "eslint-config-standard": "17.1.0", "eslint-plugin-import": "2.29.1", "eslint-plugin-n": "16.4.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", + "tsup": "8.0.1", "typescript": "5.3.3" }, "dependencies": { "@checkly/pulumi": "1.1.4", - "@pulumi/aws": "6.14.0", - "@pulumi/azure-native": "2.22.0", + "@pulumi/aws": "6.15.0", + "@pulumi/azure-native": "2.22.1", "@pulumi/cloudflare": "5.16.0", "@pulumi/command": "0.9.2", "@pulumi/docker": "4.5.0", - "@pulumi/pulumi": "3.97.0", + "@pulumi/pulumi": "3.98.0", "@pulumiverse/vercel": "1.0.1" } -} +} \ No newline at end of file diff --git a/infra/apps/remote-browser/tsconfig.json b/infra/apps/remote-browser/tsconfig.json new file mode 100644 index 0000000000..b2cb577cf5 --- /dev/null +++ b/infra/apps/remote-browser/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@infra/typescript-config/app.json", + "parserOptions": { + "project": "./tsconfig.json" + }, + "include": [ + "./src/**/*.ts", + "./.eslintrc.cjs" + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/infra/apps/uier/.eslintrc.cjs b/infra/apps/uier/.eslintrc.cjs new file mode 100644 index 0000000000..ac8a0bf66f --- /dev/null +++ b/infra/apps/uier/.eslintrc.cjs @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@infra/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "./tsconfig.json", + }, +}; \ No newline at end of file diff --git a/infra/apps/uier/Pulumi.next.yaml b/infra/apps/uier/Pulumi.next.yaml new file mode 100644 index 0000000000..e91c66e7e2 --- /dev/null +++ b/infra/apps/uier/Pulumi.next.yaml @@ -0,0 +1,6 @@ +config: + cloudflare:apiToken: + secure: AAABAAqPzyAV9mvmavpxCxB+Ws+snM4JK8mNiAxa+WqmzniW5gNmJpHXGgXZI69SkL251Lhhrp43BUrvHnTEbAFf3lG8/Wsl + vercel:apiToken: + secure: AAABAA4uxruLwvuYUDigNjy8yKK8Q3fYt/nM8JmX+RWMNsAMCiDNTbw8uFgFetLzaM4ZkQyLh/8= + vercel:team: team_Ade0MlfC3211ml3wYJZ4c9hn diff --git a/infra/apps/uier/Pulumi.production.yaml b/infra/apps/uier/Pulumi.production.yaml new file mode 100644 index 0000000000..0a4c471fd5 --- /dev/null +++ b/infra/apps/uier/Pulumi.production.yaml @@ -0,0 +1,6 @@ +config: + cloudflare:apiToken: + secure: AAABACGEfMwr2aNFBpAz+WdsfG/AgG31Ktvpe0KVGFCpoiCN8wjhe7NJYY4NJT3o/M+q8x85EOwn3Q9CfljxdPEUq4SPuXxo + vercel:apiToken: + secure: AAABAIqY6swLmFBuXsBC1nImEqM4nxOHyxnJn61fsVuM5MrM/gif2yN6U8ZkY5f/lIEQB9H/kSM= + vercel:team: team_Ade0MlfC3211ml3wYJZ4c9hn diff --git a/infra/apps/uier/Pulumi.yaml b/infra/apps/uier/Pulumi.yaml new file mode 100644 index 0000000000..47d6c808b0 --- /dev/null +++ b/infra/apps/uier/Pulumi.yaml @@ -0,0 +1,3 @@ +name: uier +runtime: nodejs +description: uier.io infrastructure diff --git a/infra/apps/uier/package.json b/infra/apps/uier/package.json new file mode 100644 index 0000000000..f94021a1f3 --- /dev/null +++ b/infra/apps/uier/package.json @@ -0,0 +1,37 @@ +{ + "name": "@infra/uier", + "private": true, + "license": "../LICENSE", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "scripts": { + "build": "tsc && tsup src/index.ts --format esm --clean", + "lint": "eslint ./src/**/*.ts", + "preview": "pulumi preview" + }, + "devDependencies": { + "@infra/pulumi": "workspace:*", + "@types/node": "20.10.5", + "@typescript-eslint/eslint-plugin": "6.15.0", + "@typescript-eslint/parser": "6.15.0", + "eslint": "8.56.0", + "eslint-config-standard": "17.1.0", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-n": "16.4.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "tsup": "8.0.1", + "typescript": "5.3.3" + }, + "dependencies": { + "@checkly/pulumi": "1.1.4", + "@pulumi/aws": "6.15.0", + "@pulumi/azure-native": "2.22.1", + "@pulumi/cloudflare": "5.16.0", + "@pulumi/command": "0.9.2", + "@pulumi/docker": "4.5.0", + "@pulumi/pulumi": "3.98.0", + "@pulumiverse/vercel": "1.0.1" + } +} \ No newline at end of file diff --git a/infra/apps/uier/src/index.ts b/infra/apps/uier/src/index.ts new file mode 100644 index 0000000000..951846e95f --- /dev/null +++ b/infra/apps/uier/src/index.ts @@ -0,0 +1,29 @@ +import { nextJsApp } from '@infra/pulumi/vercel'; +import { dnsRecord } from '@infra/pulumi/cloudflare'; +import { ProjectDomain } from '@pulumiverse/vercel'; +import { getStack } from '@pulumi/pulumi'; + +const up = async () => { + const stack = getStack(); + + const app = nextJsApp('uier', 'uier'); + + // Configure domain name + let domainName = undefined; + if (stack === 'next') domainName = 'next.uier.io'; + else if (stack === 'production') domainName = 'uier.io'; + if (domainName) { + new ProjectDomain('vercel-uier-domain', { + projectId: app.projectId, + domain: domainName, + }); + + if (stack === 'next') { + dnsRecord('vercel-uier', 'uier', 'cname.vercel-dns.com', 'CNAME', false); + } else if (stack === 'production') { + // TODO: Handle A record for production + } + } +}; + +export default up; \ No newline at end of file diff --git a/infra/apps/uier/tsconfig.json b/infra/apps/uier/tsconfig.json new file mode 100644 index 0000000000..b2cb577cf5 --- /dev/null +++ b/infra/apps/uier/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@infra/typescript-config/app.json", + "parserOptions": { + "project": "./tsconfig.json" + }, + "include": [ + "./src/**/*.ts", + "./.eslintrc.cjs" + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/infra/package.json b/infra/package.json new file mode 100644 index 0000000000..f1718d27bf --- /dev/null +++ b/infra/package.json @@ -0,0 +1,19 @@ +{ + "name": "infra", + "private": true, + "scripts": { + "build": "turbo build", + "preview": "turbo preview", + "lint": "turbo lint", + "format": "prettier --write \"**/*.{ts,tsx,md}\"" + }, + "devDependencies": { + "@infra/eslint-config": "workspace:*", + "@infra/typescript-config": "workspace:*", + "turbo": "latest" + }, + "packageManager": "pnpm@8.12.1", + "engines": { + "node": ">=18" + } +} diff --git a/infra/packages/eslint-config/README.md b/infra/packages/eslint-config/README.md new file mode 100644 index 0000000000..8b42d901b0 --- /dev/null +++ b/infra/packages/eslint-config/README.md @@ -0,0 +1,3 @@ +# `@turbo/eslint-config` + +Collection of internal eslint configurations. diff --git a/infra/packages/eslint-config/library.js b/infra/packages/eslint-config/library.js new file mode 100644 index 0000000000..6eeae10b3f --- /dev/null +++ b/infra/packages/eslint-config/library.js @@ -0,0 +1,61 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: [ + "eslint:recommended", + "eslint-config-turbo", + "plugin:import/recommended", + "plugin:@typescript-eslint/recommended" + ], + plugins: ["only-warn", "@typescript-eslint"], + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project + }, + } + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["*.js?(x)", "*.ts?(x)"], + }, + ], + rules: { + "indent": [ + "error", + 4 + ], + "quotes": [ + "error", + "single" + ], + "comma-dangle": [ + "warn", + { + "arrays": "always-multiline", + "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline", + "functions": "always-multiline" + } + ], + "semi": [ + "error", + "always" + ], + "import/no-unresolved": 0, + "import/no-absolute-path": 0 + } +}; diff --git a/infra/packages/eslint-config/package.json b/infra/packages/eslint-config/package.json new file mode 100644 index 0000000000..290d7a5fd0 --- /dev/null +++ b/infra/packages/eslint-config/package.json @@ -0,0 +1,18 @@ +{ + "name": "@infra/eslint-config", + "version": "0.0.0", + "private": true, + "files": [ + "library.js" + ], + "devDependencies": { + "eslint-config-turbo": "1.11.2", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-only-warn": "1.1.0", + "eslint-plugin-import": "2.29.1", + "eslint-import-resolver-typescript": "3.6.1", + "@typescript-eslint/parser": "6.15.0", + "@typescript-eslint/eslint-plugin": "6.15.0", + "typescript": "5.3.3" + } +} diff --git a/infra/packages/pulumi/.eslintrc.cjs b/infra/packages/pulumi/.eslintrc.cjs new file mode 100644 index 0000000000..ac8a0bf66f --- /dev/null +++ b/infra/packages/pulumi/.eslintrc.cjs @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@infra/eslint-config/library.js"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "./tsconfig.json", + }, +}; \ No newline at end of file diff --git a/infra/packages/pulumi/package.json b/infra/packages/pulumi/package.json new file mode 100644 index 0000000000..db62e4ee37 --- /dev/null +++ b/infra/packages/pulumi/package.json @@ -0,0 +1,53 @@ +{ + "name": "@infra/pulumi", + "private": true, + "license": "../LICENSE", + "type": "module", + "scripts": { + "lint": "eslint ./src/**/*.ts" + }, + "exports": { + "./azure": { + "import": "./src/azure/index.ts" + }, + "./aws": { + "import": "./src/aws/index.ts" + }, + "./cloudflare": { + "import": "./src/cloudflare/index.ts" + }, + "./checkly": { + "import": "./src/checkly/index.ts" + }, + "./vercel": { + "import": "./src/vercel/index.ts" + }, + "./dotnet": { + "import": "./src/dotnet/index.ts" + } + }, + "devDependencies": { + "@infra/typescript-config": "workspace:*", + "@infra/eslint-config": "workspace:*", + "@types/node": "20.10.5", + "@typescript-eslint/eslint-plugin": "6.15.0", + "@typescript-eslint/parser": "6.15.0", + "eslint": "8.56.0", + "eslint-config-standard": "17.1.0", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-n": "16.4.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "typescript": "5.3.3" + }, + "dependencies": { + "@checkly/pulumi": "1.1.4", + "@pulumi/aws": "6.15.0", + "@pulumi/azure-native": "2.22.1", + "@pulumi/cloudflare": "5.16.0", + "@pulumi/command": "0.9.2", + "@pulumi/docker": "4.5.0", + "@pulumi/pulumi": "3.98.0", + "@pulumiverse/vercel": "1.0.1" + } +} \ No newline at end of file diff --git a/cloud/infrastructure/src/AWS/createSes.ts b/infra/packages/pulumi/src/aws/createSes.ts similarity index 93% rename from cloud/infrastructure/src/AWS/createSes.ts rename to infra/packages/pulumi/src/aws/createSes.ts index 2031746189..ba09e31e7e 100644 --- a/cloud/infrastructure/src/AWS/createSes.ts +++ b/infra/packages/pulumi/src/aws/createSes.ts @@ -1,9 +1,9 @@ import { Config, interpolate } from '@pulumi/pulumi'; -import { User, AccessKey, UserPolicy } from '@pulumi/aws/iam'; -import { DomainIdentity, MailFrom, DomainDkim } from '@pulumi/aws/ses'; -import dnsRecord from '../CloudFlare/dnsRecord'; +import { User, AccessKey, UserPolicy } from '@pulumi/aws/iam/index.js'; +import { DomainIdentity, MailFrom, DomainDkim } from '@pulumi/aws/ses/index.js'; +import { dnsRecord } from '../cloudflare/dnsRecord.js'; -export default function createSes (prefix: string, subdomain: string) { +export function createSes(prefix: string, subdomain: string) { const config = new Config(); const baseDomain = config.require('domain'); const sesRegion = config.require('ses-region'); diff --git a/infra/packages/pulumi/src/aws/index.ts b/infra/packages/pulumi/src/aws/index.ts new file mode 100644 index 0000000000..1e4bbf290b --- /dev/null +++ b/infra/packages/pulumi/src/aws/index.ts @@ -0,0 +1 @@ +export * from './createSes.js'; \ No newline at end of file diff --git a/cloud/infrastructure/src/Azure/assignCustomDomain.ts b/infra/packages/pulumi/src/azure/assignCustomDomain.ts similarity index 74% rename from cloud/infrastructure/src/Azure/assignCustomDomain.ts rename to infra/packages/pulumi/src/azure/assignCustomDomain.ts index 754a7c6ea0..5c0b061b16 100644 --- a/cloud/infrastructure/src/Azure/assignCustomDomain.ts +++ b/infra/packages/pulumi/src/azure/assignCustomDomain.ts @@ -1,14 +1,24 @@ import { Config, interpolate, type StackReference, Output } from '@pulumi/pulumi'; -import { WebApp, AppServicePlan, WebAppHostNameBinding, Certificate, HostNameType, SslState, CustomHostNameDnsRecordType } from '@pulumi/azure-native/web'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; -import dnsRecord from '../CloudFlare/dnsRecord'; +import { + WebApp, + AppServicePlan, + WebAppHostNameBinding, + Certificate, + HostNameType, + SslState, + CustomHostNameDnsRecordType, + getCertificate, + getWebAppPublicCertificate +} from '@pulumi/azure-native/web/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { dnsRecord } from '../cloudflare/dnsRecord.js'; -export function assignCustomDomain ( - resourceGroup: ResourceGroup, - webApp: WebApp, - servicePlan: AppServicePlan, - namePrefix: string, - subDomainName: string, +export function assignCustomDomain( + resourceGroup: ResourceGroup, + webApp: WebApp, + servicePlan: AppServicePlan, + namePrefix: string, + subDomainName: string, currentStack: StackReference, protect: boolean) { const config = new Config(); @@ -19,15 +29,13 @@ export function assignCustomDomain ( `asuid.${fullDomainName}`, interpolate`${webApp.customDomainVerificationId}`, 'TXT', - protect, - webApp); + protect); const cname = dnsRecord( `func-dns-cname-${namePrefix}`, fullDomainName, webApp.defaultHostName, 'CNAME', protect, - webApp, ); const certsOutput = currentStack.getOutput('certs') as Output<{ fullDomainName: string, thumbprint: string }[]>; @@ -47,6 +55,7 @@ export function assignCustomDomain ( const cert = new Certificate(`func-cert-${namePrefix}`, { resourceGroupName: resourceGroup.name, + name: `cert-${namePrefix}`, canonicalName: fullDomainName, serverFarmId: servicePlan.id, }, { diff --git a/cloud/infrastructure/src/Azure/assignFunctionCodeAsync.ts b/infra/packages/pulumi/src/azure/assignFunctionCodeAsync.ts similarity index 72% rename from cloud/infrastructure/src/Azure/assignFunctionCodeAsync.ts rename to infra/packages/pulumi/src/azure/assignFunctionCodeAsync.ts index 1d6412bc50..fb3e04437b 100644 --- a/cloud/infrastructure/src/Azure/assignFunctionCodeAsync.ts +++ b/infra/packages/pulumi/src/azure/assignFunctionCodeAsync.ts @@ -1,8 +1,8 @@ import { type Input, type Resource } from '@pulumi/pulumi'; -import { FileArchive } from '@pulumi/pulumi/asset'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import { Blob, type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage'; -import { signedBlobReadUrl } from './signedBlobReadUrl'; +import { FileArchive } from '@pulumi/pulumi/asset/index.js'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { Blob, type BlobContainer, type StorageAccount } from '@pulumi/azure-native/storage/index.js'; +import { signedBlobReadUrl } from './signedBlobReadUrl.js'; export async function assignFunctionCodeAsync( resourceGroup: ResourceGroup, @@ -12,14 +12,15 @@ export async function assignFunctionCodeAsync( codePath: string, dependsOn?: Input | Input[]> | undefined) { // Upload Azure Function's code as a zip archive to the storage account. - const codeBlob = new Blob(`zip-${namePrefix}`, { - blobName: `zip-${namePrefix}`, + const codeBlob = new Blob(`zip-${namePrefix}-${new Date().getTime()}`, { + blobName: `zip-${namePrefix}-${new Date().getTime()}.zip`, resourceGroupName: resourceGroup.name, accountName: storageAccount.name, containerName: zipsContainer.name, source: new FileArchive(codePath), }, { dependsOn, + retainOnDelete: true, }); const codeBlobUrl = signedBlobReadUrl(codeBlob, zipsContainer, storageAccount, resourceGroup); diff --git a/cloud/infrastructure/src/Azure/assignFunctionSettings.ts b/infra/packages/pulumi/src/azure/assignFunctionSettings.ts similarity index 74% rename from cloud/infrastructure/src/Azure/assignFunctionSettings.ts rename to infra/packages/pulumi/src/azure/assignFunctionSettings.ts index 46de32f7c3..31bde41b51 100644 --- a/cloud/infrastructure/src/Azure/assignFunctionSettings.ts +++ b/infra/packages/pulumi/src/azure/assignFunctionSettings.ts @@ -1,8 +1,8 @@ import { Input } from '@pulumi/pulumi'; -import { type WebApp, WebAppApplicationSettings } from '@pulumi/azure-native/web'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; +import { type WebApp, WebAppApplicationSettings } from '@pulumi/azure-native/web/index.js'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; -export function assignFunctionSettings (resourceGroup: ResourceGroup, app: WebApp, namePrefix: string, storageConnectionString: Input, codeUrl: Input, appSettings: Input<{ [key: string]: Input; }>, protect: boolean) { +export function assignFunctionSettings(resourceGroup: ResourceGroup, app: WebApp, namePrefix: string, storageConnectionString: Input, codeUrl: Input, appSettings: Input<{ [key: string]: Input; }>, protect: boolean) { const settings = new WebAppApplicationSettings(`func-appsettings-${namePrefix}`, { name: app.name, resourceGroupName: resourceGroup.name, diff --git a/cloud/infrastructure/src/Azure/containerRegistry.ts b/infra/packages/pulumi/src/azure/containerRegistry.ts similarity index 92% rename from cloud/infrastructure/src/Azure/containerRegistry.ts rename to infra/packages/pulumi/src/azure/containerRegistry.ts index c40086acb3..3765761740 100644 --- a/cloud/infrastructure/src/Azure/containerRegistry.ts +++ b/infra/packages/pulumi/src/azure/containerRegistry.ts @@ -1,10 +1,10 @@ -import { Registry, listRegistryCredentialsOutput, getRegistryOutput } from '@pulumi/azure-native/containerregistry'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; +import { Registry, listRegistryCredentialsOutput, getRegistryOutput } from '@pulumi/azure-native/containerregistry/index.js'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; import { interpolate, type Output } from '@pulumi/pulumi'; export type ContainerRegistryResult = { registry: { - name: Output, + name: Output, loginServer: Output }, credentials: { @@ -28,7 +28,7 @@ export function getContainerRegistry(resourceGroupName: string, name: string): C registry, credentials: { adminUserName: interpolate`${credentials.username}`, - adminPassword: credentials.apply(c => c.passwords![0].value!), + adminPassword: credentials.apply(c => c.passwords![0]!.value!), }, }; } @@ -54,7 +54,7 @@ export function createContainerRegistry(resourceGroup: ResourceGroup, name: stri registry, credentials: { adminUserName: interpolate`${credentials.username}`, - adminPassword: credentials.apply(c => c.passwords![0].value!), + adminPassword: credentials.apply(c => c.passwords![0]!.value!), }, }; } \ No newline at end of file diff --git a/cloud/infrastructure/src/Azure/createAppInsights.ts b/infra/packages/pulumi/src/azure/createAppInsights.ts similarity index 83% rename from cloud/infrastructure/src/Azure/createAppInsights.ts rename to infra/packages/pulumi/src/azure/createAppInsights.ts index a02c9575d1..b73a9ca820 100644 --- a/cloud/infrastructure/src/Azure/createAppInsights.ts +++ b/infra/packages/pulumi/src/azure/createAppInsights.ts @@ -1,8 +1,8 @@ -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import { ComponentCurrentBillingFeature, Component, ApplicationType, type ComponentArgs } from '@pulumi/azure-native/insights'; -import type createLogWorkspace from './createLogWorkspace'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { ComponentCurrentBillingFeature, Component, ApplicationType, type ComponentArgs } from '@pulumi/azure-native/insights/index.js'; +import { createLogWorkspace } from './createLogWorkspace.js'; -export default function createAppInsights( +export function createAppInsights( resourceGroup: ResourceGroup, namePrefix: string, logWorkspace: ReturnType, diff --git a/cloud/infrastructure/src/Azure/createContainerApp.ts b/infra/packages/pulumi/src/azure/createContainerApp.ts similarity index 81% rename from cloud/infrastructure/src/Azure/createContainerApp.ts rename to infra/packages/pulumi/src/azure/createContainerApp.ts index be6509ad96..009d83a3ec 100644 --- a/cloud/infrastructure/src/Azure/createContainerApp.ts +++ b/infra/packages/pulumi/src/azure/createContainerApp.ts @@ -1,10 +1,10 @@ -import { ContainerApp, ManagedEnvironment } from '@pulumi/azure-native/app'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { ContainerApp, ManagedEnvironment } from '@pulumi/azure-native/app/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; import { Image } from '@pulumi/docker'; import { interpolate } from '@pulumi/pulumi'; -import { type ContainerRegistryResult } from './containerRegistry'; +import { type ContainerRegistryResult } from './containerRegistry.js'; -export default function createContainerApp(resourceGroup: ResourceGroup, namePrefix: string, environment: ManagedEnvironment, registry: ContainerRegistryResult, image: Image, shouldProtect: boolean) { +export function createContainerApp(resourceGroup: ResourceGroup, namePrefix: string, environment: ManagedEnvironment, registry: ContainerRegistryResult, image: Image, shouldProtect: boolean) { const containerApp = new ContainerApp(`docker-app-${namePrefix}`, { resourceGroupName: resourceGroup.name, managedEnvironmentId: environment.id, diff --git a/cloud/infrastructure/src/Azure/createContainerImage.ts b/infra/packages/pulumi/src/azure/createContainerImage.ts similarity index 80% rename from cloud/infrastructure/src/Azure/createContainerImage.ts rename to infra/packages/pulumi/src/azure/createContainerImage.ts index 0dcfb00124..2858aef4df 100644 --- a/cloud/infrastructure/src/Azure/createContainerImage.ts +++ b/infra/packages/pulumi/src/azure/createContainerImage.ts @@ -1,19 +1,19 @@ import { Image } from '@pulumi/docker'; import { getStack, interpolate } from '@pulumi/pulumi'; -import { type ContainerRegistryResult } from './containerRegistry'; -import path = require('node:path'); +import { type ContainerRegistryResult } from './containerRegistry.js'; +import path from 'node:path'; -export default function createContainerImage( +export function createContainerImage( registry: ContainerRegistryResult, namePrefix: string, imageName: string, projectName: string, ) { const stack = getStack(); - const workingDirectory = path.join(process.cwd(), '..', 'src', projectName); + const workingDirectory = path.join(process.cwd(), '..', '..', '..', 'cloud', 'src', projectName); const image = new Image(`docker-image-${namePrefix}`, { imageName: interpolate`${registry.registry.loginServer}/${imageName}:${stack}`, - build: { + build: { context: workingDirectory, platform: 'linux/amd64', }, diff --git a/cloud/infrastructure/src/Azure/createFunction.ts b/infra/packages/pulumi/src/azure/createFunction.ts similarity index 92% rename from cloud/infrastructure/src/Azure/createFunction.ts rename to infra/packages/pulumi/src/azure/createFunction.ts index 892d0c7ccf..fb5fa6d71b 100644 --- a/cloud/infrastructure/src/Azure/createFunction.ts +++ b/infra/packages/pulumi/src/azure/createFunction.ts @@ -1,8 +1,8 @@ -import { WebApp, AppServicePlan, SupportedTlsVersions } from '@pulumi/azure-native/web'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { WebApp, AppServicePlan, SupportedTlsVersions } from '@pulumi/azure-native/web/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; import { Input, interpolate } from '@pulumi/pulumi'; -export function createFunction ( +export function createFunction( resourceGroup: ResourceGroup, namePrefix: string, protect: boolean, diff --git a/cloud/infrastructure/src/Azure/createFunctionsStorage.ts b/infra/packages/pulumi/src/azure/createFunctionsStorage.ts similarity index 74% rename from cloud/infrastructure/src/Azure/createFunctionsStorage.ts rename to infra/packages/pulumi/src/azure/createFunctionsStorage.ts index b262fcbd1b..11803cd138 100644 --- a/cloud/infrastructure/src/Azure/createFunctionsStorage.ts +++ b/infra/packages/pulumi/src/azure/createFunctionsStorage.ts @@ -1,14 +1,14 @@ -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import { createStorageAccount } from './createStorageAccount'; -import { BlobContainer } from '@pulumi/azure-native/storage'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { createStorageAccount } from './createStorageAccount.js'; +import { BlobContainer } from '@pulumi/azure-native/storage/index.js'; -export default function createFunctionsStorage( +export function createFunctionsStorage( resourceGroup: ResourceGroup, namePrefix: string, protect: boolean, - + ) { - const account = createStorageAccount(resourceGroup, namePrefix, protect, resourceGroup); + const account = createStorageAccount(resourceGroup, namePrefix, protect); // Function code archives will be stored in this container. const codeContainer = new BlobContainer(`func-zips-${namePrefix}`, { diff --git a/cloud/infrastructure/src/Azure/createKeyVault.ts b/infra/packages/pulumi/src/azure/createKeyVault.ts similarity index 92% rename from cloud/infrastructure/src/Azure/createKeyVault.ts rename to infra/packages/pulumi/src/azure/createKeyVault.ts index 1b3c0a12fc..286674b552 100644 --- a/cloud/infrastructure/src/Azure/createKeyVault.ts +++ b/infra/packages/pulumi/src/azure/createKeyVault.ts @@ -1,9 +1,9 @@ import { Output } from '@pulumi/pulumi'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; -import { Vault, SkuFamily, SkuName, KeyPermissions, SecretPermissions } from '@pulumi/azure-native/keyvault'; -import { getClientConfig } from '@pulumi/azure-native/authorization'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { Vault, SkuFamily, SkuName, KeyPermissions, SecretPermissions } from '@pulumi/azure-native/keyvault/index.js'; +import { getClientConfig } from '@pulumi/azure-native/authorization/index.js'; -export function createKeyVault ( +export function createKeyVault( resourceGroup: ResourceGroup, namePrefix: string, protect: boolean, diff --git a/cloud/infrastructure/src/Azure/createLogWorkspace.ts b/infra/packages/pulumi/src/azure/createLogWorkspace.ts similarity index 73% rename from cloud/infrastructure/src/Azure/createLogWorkspace.ts rename to infra/packages/pulumi/src/azure/createLogWorkspace.ts index eb97293625..bffcf64819 100644 --- a/cloud/infrastructure/src/Azure/createLogWorkspace.ts +++ b/infra/packages/pulumi/src/azure/createLogWorkspace.ts @@ -1,7 +1,7 @@ -import { Workspace, getSharedKeysOutput, WorkspaceSkuNameEnum } from '@pulumi/azure-native/operationalinsights'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { Workspace, getSharedKeysOutput, WorkspaceSkuNameEnum } from '@pulumi/azure-native/operationalinsights/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; -export default function createLogWorkspace(resourceGroup: ResourceGroup, namePrefix: string) { +export function createLogWorkspace(resourceGroup: ResourceGroup, namePrefix: string) { const workspace = new Workspace(`loganalytics-${namePrefix}`, { resourceGroupName: resourceGroup.name, sku: { diff --git a/cloud/infrastructure/src/Azure/createManagedEnvironment.ts b/infra/packages/pulumi/src/azure/createManagedEnvironment.ts similarity index 73% rename from cloud/infrastructure/src/Azure/createManagedEnvironment.ts rename to infra/packages/pulumi/src/azure/createManagedEnvironment.ts index b38f0f1d72..67745bc24d 100644 --- a/cloud/infrastructure/src/Azure/createManagedEnvironment.ts +++ b/infra/packages/pulumi/src/azure/createManagedEnvironment.ts @@ -1,11 +1,11 @@ -import { ManagedEnvironment } from '@pulumi/azure-native/app'; -import { GetSharedKeysResult } from '@pulumi/azure-native/operationalinsights'; -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import type createLogWorkspace from './createLogWorkspace'; +import { ManagedEnvironment } from '@pulumi/azure-native/app/index.js'; +import { GetSharedKeysResult } from '@pulumi/azure-native/operationalinsights/index.js'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { createLogWorkspace } from './createLogWorkspace.js'; -export default function createManagedEnvironments( - resourceGroup: ResourceGroup, - namePrefix: string, +export function createManagedEnvironment( + resourceGroup: ResourceGroup, + namePrefix: string, logWorkspace: ReturnType, shouldProtect: boolean) { const managedEnvironment = new ManagedEnvironment(`env-${namePrefix}`, { diff --git a/cloud/infrastructure/src/Azure/createPublicFunction.ts b/infra/packages/pulumi/src/azure/createPublicFunction.ts similarity index 52% rename from cloud/infrastructure/src/Azure/createPublicFunction.ts rename to infra/packages/pulumi/src/azure/createPublicFunction.ts index 26acee4f4a..184b5633ab 100644 --- a/cloud/infrastructure/src/Azure/createPublicFunction.ts +++ b/infra/packages/pulumi/src/azure/createPublicFunction.ts @@ -1,18 +1,18 @@ -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; import { type Input, type StackReference } from '@pulumi/pulumi'; -import { assignCustomDomain } from './assignCustomDomain'; -import { createFunction } from './createFunction'; +import { assignCustomDomain } from './assignCustomDomain.js'; +import { createFunction } from './createFunction.js'; -export default function createPublicFunction ( - resourceGroup: ResourceGroup, - namePrefix: string, - subDomainName: string, - corsDomains: Input[] | undefined, +export function createPublicFunction( + resourceGroup: ResourceGroup, + namePrefix: string, + subDomainName: string, + corsDomains: Input[] | undefined, currentStack: StackReference, protect: boolean) { const pubFunc = createFunction(resourceGroup, namePrefix, protect, true, corsDomains); const domain = assignCustomDomain( - resourceGroup, pubFunc.webApp, pubFunc.servicePlan, namePrefix, subDomainName, + resourceGroup, pubFunc.webApp, pubFunc.servicePlan, namePrefix, subDomainName, currentStack, protect); return { diff --git a/cloud/infrastructure/src/Azure/createSignalR.ts b/infra/packages/pulumi/src/azure/createSignalR.ts similarity index 94% rename from cloud/infrastructure/src/Azure/createSignalR.ts rename to infra/packages/pulumi/src/azure/createSignalR.ts index 8a9d82be50..d715272a99 100644 --- a/cloud/infrastructure/src/Azure/createSignalR.ts +++ b/infra/packages/pulumi/src/azure/createSignalR.ts @@ -1,6 +1,6 @@ import { Input, interpolate } from '@pulumi/pulumi'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; -import { SignalR, listSignalRKeysOutput } from '@pulumi/azure-native/signalrservice'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { SignalR, listSignalRKeysOutput } from '@pulumi/azure-native/signalrservice/index.js'; export function createSignalR(resourceGroup: ResourceGroup, namePrefix: string, cors: Input[], sku: 'free' | 'standard1', protect: boolean) { const signalr = new SignalR('signalr-' + namePrefix, { diff --git a/cloud/infrastructure/src/Azure/createStorageAccount.ts b/infra/packages/pulumi/src/azure/createStorageAccount.ts similarity index 59% rename from cloud/infrastructure/src/Azure/createStorageAccount.ts rename to infra/packages/pulumi/src/azure/createStorageAccount.ts index 797b810264..69d11f8ded 100644 --- a/cloud/infrastructure/src/Azure/createStorageAccount.ts +++ b/infra/packages/pulumi/src/azure/createStorageAccount.ts @@ -1,10 +1,8 @@ -import { Resource } from '@pulumi/pulumi'; -import { StorageAccount, SkuName, Kind, MinimumTlsVersion } from '@pulumi/azure-native/storage'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { StorageAccount, SkuName, Kind, MinimumTlsVersion } from '@pulumi/azure-native/storage/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { getConnectionString } from './getConnectionString.js'; -import { getConnectionString } from './getConnectionString'; - -export function createStorageAccount (resourceGroup: ResourceGroup, namePrefix: string, protect: boolean, parent?: Resource) { +export function createStorageAccount(resourceGroup: ResourceGroup, namePrefix: string, protect: boolean) { const storageAccount = new StorageAccount(`sa${namePrefix}`, { resourceGroupName: resourceGroup.name, enableHttpsTrafficOnly: true, @@ -15,7 +13,6 @@ export function createStorageAccount (resourceGroup: ResourceGroup, namePrefix: kind: Kind.StorageV2, }, { protect, - // parent: parent ?? resourceGroup }); const connectionString = getConnectionString(resourceGroup, storageAccount); diff --git a/cloud/infrastructure/src/Azure/getConnectionString.ts b/infra/packages/pulumi/src/azure/getConnectionString.ts similarity index 62% rename from cloud/infrastructure/src/Azure/getConnectionString.ts rename to infra/packages/pulumi/src/azure/getConnectionString.ts index 1130f7c240..7b40733d10 100644 --- a/cloud/infrastructure/src/Azure/getConnectionString.ts +++ b/infra/packages/pulumi/src/azure/getConnectionString.ts @@ -1,11 +1,11 @@ import { Output, interpolate } from '@pulumi/pulumi'; -import { listStorageAccountKeysOutput, StorageAccount } from '@pulumi/azure-native/storage'; -import { ResourceGroup } from '@pulumi/azure-native/resources'; +import { listStorageAccountKeysOutput, StorageAccount } from '@pulumi/azure-native/storage/index.js'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; -export function getConnectionString (resourceGroup: ResourceGroup, account: StorageAccount): Output { +export function getConnectionString(resourceGroup: ResourceGroup, account: StorageAccount): Output { // Retrieve the primary storage account key. const storageAccountKeys = listStorageAccountKeysOutput({ resourceGroupName: resourceGroup.name, accountName: account.name }); - const primaryStorageKey = storageAccountKeys.keys[0].value; + const primaryStorageKey = storageAccountKeys.keys[0]!.value; // Build the connection string to the storage account. return interpolate`DefaultEndpointsProtocol=https;AccountName=${account.name};AccountKey=${primaryStorageKey}`; diff --git a/infra/packages/pulumi/src/azure/index.ts b/infra/packages/pulumi/src/azure/index.ts new file mode 100644 index 0000000000..2e5e039a43 --- /dev/null +++ b/infra/packages/pulumi/src/azure/index.ts @@ -0,0 +1,20 @@ +export * from './assignCustomDomain.js'; +export * from './containerRegistry.js'; +export * from './assignFunctionSettings.js'; +export * from './createAppInsights.js'; +export * from './createStorageAccount.js'; +export * from './assignFunctionCodeAsync.js'; +export * from './createKeyVault.js'; +export * from './createSignalR.js'; +export * from './createContainerApp.js'; +export * from './createContainerImage.js'; +export * from './createFunction.js'; +export * from './createFunctionsStorage.js'; +export * from './createKeyVault.js'; +export * from './createLogWorkspace.js'; +export * from './createManagedEnvironment.js'; +export * from './createPublicFunction.js'; +export * from './getConnectionString.js'; +export * from './signedBlobReadUrl.js'; +export * from './vaultSecret.js'; +export * from './webAppIdentity.js'; diff --git a/cloud/infrastructure/src/Azure/signedBlobReadUrl.ts b/infra/packages/pulumi/src/azure/signedBlobReadUrl.ts similarity index 92% rename from cloud/infrastructure/src/Azure/signedBlobReadUrl.ts rename to infra/packages/pulumi/src/azure/signedBlobReadUrl.ts index 9e76c79f96..92cb029718 100644 --- a/cloud/infrastructure/src/Azure/signedBlobReadUrl.ts +++ b/infra/packages/pulumi/src/azure/signedBlobReadUrl.ts @@ -1,10 +1,10 @@ -import { type ResourceGroup } from '@pulumi/azure-native/resources'; -import { type Blob, type BlobContainer, type StorageAccount, SignedResource, Permissions, HttpProtocol, listStorageAccountServiceSASOutput } from '@pulumi/azure-native/storage'; +import { type ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { type Blob, type BlobContainer, type StorageAccount, SignedResource, Permissions, HttpProtocol, listStorageAccountServiceSASOutput } from '@pulumi/azure-native/storage/index.js'; import { interpolate, Output } from '@pulumi/pulumi'; const accessYearsValid = 3; -export function signedBlobReadUrl ( +export function signedBlobReadUrl( blob: Blob, container: BlobContainer, account: StorageAccount, diff --git a/cloud/infrastructure/src/Azure/vaultSecret.ts b/infra/packages/pulumi/src/azure/vaultSecret.ts similarity index 51% rename from cloud/infrastructure/src/Azure/vaultSecret.ts rename to infra/packages/pulumi/src/azure/vaultSecret.ts index 284e32cadc..49250cf43d 100644 --- a/cloud/infrastructure/src/Azure/vaultSecret.ts +++ b/infra/packages/pulumi/src/azure/vaultSecret.ts @@ -1,8 +1,8 @@ -import { ResourceGroup } from '@pulumi/azure-native/resources'; -import { Vault, Secret } from '@pulumi/azure-native/keyvault'; +import { ResourceGroup } from '@pulumi/azure-native/resources/index.js'; +import { Vault, Secret } from '@pulumi/azure-native/keyvault/index.js'; import { Input, Resource } from '@pulumi/pulumi'; -export default function vaultSecret (resourceGroup: ResourceGroup, vault: Vault, namePrefix: string, name: string, value: Input, waitFor?: Input | Input[]>) { +export function vaultSecret(resourceGroup: ResourceGroup, vault: Vault, namePrefix: string, name: string, value: Input, waitFor?: Input | Input[]>) { const secret = new Secret(`secret-${namePrefix}-${name}`, { resourceGroupName: resourceGroup.name, vaultName: vault.name, diff --git a/cloud/infrastructure/src/Azure/webAppIdentity.ts b/infra/packages/pulumi/src/azure/webAppIdentity.ts similarity index 69% rename from cloud/infrastructure/src/Azure/webAppIdentity.ts rename to infra/packages/pulumi/src/azure/webAppIdentity.ts index 7d557aae82..9e16d97956 100644 --- a/cloud/infrastructure/src/Azure/webAppIdentity.ts +++ b/infra/packages/pulumi/src/azure/webAppIdentity.ts @@ -1,7 +1,7 @@ import { interpolate } from '@pulumi/pulumi'; -import { WebApp } from '@pulumi/azure-native/web'; +import { WebApp } from '@pulumi/azure-native/web/index.js'; -export function webAppIdentity (webApp: WebApp) { +export function webAppIdentity(webApp: WebApp) { return webApp.identity.apply(identity => { return { tenantId: interpolate`${identity?.tenantId}`, diff --git a/cloud/infrastructure/src/Checkly/apiStatusCheck.ts b/infra/packages/pulumi/src/checkly/apiStatusCheck.ts similarity index 80% rename from cloud/infrastructure/src/Checkly/apiStatusCheck.ts rename to infra/packages/pulumi/src/checkly/apiStatusCheck.ts index 158cae87d7..54cd106b56 100644 --- a/cloud/infrastructure/src/Checkly/apiStatusCheck.ts +++ b/infra/packages/pulumi/src/checkly/apiStatusCheck.ts @@ -3,7 +3,7 @@ import { Check } from '@checkly/pulumi'; export type CheckFrequency = 15 | 30 | 60 | 120 | 180 | 360 | 720 | 1440; -export default function apiStatusCheck(prefix: string, name: string, domain: Input, frequency: CheckFrequency, route?: string) { +export function apiStatusCheck(prefix: string, name: string, domain: Input, frequency: CheckFrequency, route?: string) { const stack = getStack(); new Check(`apicheck-${prefix}`, { name: `${name}`, diff --git a/infra/packages/pulumi/src/checkly/index.ts b/infra/packages/pulumi/src/checkly/index.ts new file mode 100644 index 0000000000..dbd0a7afe6 --- /dev/null +++ b/infra/packages/pulumi/src/checkly/index.ts @@ -0,0 +1 @@ +export * from './apiStatusCheck.js'; diff --git a/cloud/infrastructure/src/CloudFlare/dnsRecord.ts b/infra/packages/pulumi/src/cloudflare/dnsRecord.ts similarity index 55% rename from cloud/infrastructure/src/CloudFlare/dnsRecord.ts rename to infra/packages/pulumi/src/cloudflare/dnsRecord.ts index cf20dae596..6d477804fb 100644 --- a/cloud/infrastructure/src/CloudFlare/dnsRecord.ts +++ b/infra/packages/pulumi/src/cloudflare/dnsRecord.ts @@ -1,7 +1,7 @@ -import { Config, Input, Resource } from '@pulumi/pulumi'; +import { Config, Input } from '@pulumi/pulumi'; import { Record } from '@pulumi/cloudflare'; -export default function dnsRecord (name: string, dnsName: Input, value: Input, type: 'CNAME' | 'TXT' | 'MX', protect: boolean, parent?: Resource) { +export function dnsRecord(name: string, dnsName: Input, value: Input, type: 'CNAME' | 'TXT' | 'MX', protect: boolean) { const config = new Config(); const zoneId = config.requireSecret('zoneid'); return new Record(name, { @@ -12,6 +12,5 @@ export default function dnsRecord (name: string, dnsName: Input, value: priority: type === 'MX' ? 10 : undefined, }, { protect, - // parent: parent }); } diff --git a/infra/packages/pulumi/src/cloudflare/index.ts b/infra/packages/pulumi/src/cloudflare/index.ts new file mode 100644 index 0000000000..dcb5d09692 --- /dev/null +++ b/infra/packages/pulumi/src/cloudflare/index.ts @@ -0,0 +1 @@ +export * from './dnsRecord.js'; diff --git a/infra/packages/pulumi/src/dotnet/index.ts b/infra/packages/pulumi/src/dotnet/index.ts new file mode 100644 index 0000000000..76a992766a --- /dev/null +++ b/infra/packages/pulumi/src/dotnet/index.ts @@ -0,0 +1 @@ +export * from './publishProjectAsync.js'; diff --git a/cloud/infrastructure/src/dotnet/publishProjectAsync.ts b/infra/packages/pulumi/src/dotnet/publishProjectAsync.ts similarity index 72% rename from cloud/infrastructure/src/dotnet/publishProjectAsync.ts rename to infra/packages/pulumi/src/dotnet/publishProjectAsync.ts index 809f5af6c4..e435a7e868 100644 --- a/cloud/infrastructure/src/dotnet/publishProjectAsync.ts +++ b/infra/packages/pulumi/src/dotnet/publishProjectAsync.ts @@ -1,6 +1,6 @@ -import { run } from '@pulumi/command/local'; +import { run } from '@pulumi/command/local/index.js'; -export default async function publishProjectAsync (codePath: string, dotnet: 7 = 7) { +export async function publishProjectAsync(codePath: string, dotnet: 7 = 7) { await run({ command: 'dotnet clean', dir: codePath, diff --git a/infra/packages/pulumi/src/vercel/index.ts b/infra/packages/pulumi/src/vercel/index.ts new file mode 100644 index 0000000000..80a560eee2 --- /dev/null +++ b/infra/packages/pulumi/src/vercel/index.ts @@ -0,0 +1,2 @@ +export * from './nextJsApp.js'; +export * from './vercelApp.js'; diff --git a/cloud/infrastructure/src/Vercel/nextJsApp.ts b/infra/packages/pulumi/src/vercel/nextJsApp.ts similarity index 54% rename from cloud/infrastructure/src/Vercel/nextJsApp.ts rename to infra/packages/pulumi/src/vercel/nextJsApp.ts index f3f0805add..fd1670054f 100644 --- a/cloud/infrastructure/src/Vercel/nextJsApp.ts +++ b/infra/packages/pulumi/src/vercel/nextJsApp.ts @@ -1,7 +1,7 @@ -import { vercelApp } from './vercelApp'; +import { vercelApp } from './vercelApp.js'; export function nextJsApp(prefix: string, name: string) { - vercelApp(prefix, name, { + return vercelApp(prefix, name, { framework: 'nextjs', }); } \ No newline at end of file diff --git a/cloud/infrastructure/src/Vercel/vercelApp.ts b/infra/packages/pulumi/src/vercel/vercelApp.ts similarity index 87% rename from cloud/infrastructure/src/Vercel/vercelApp.ts rename to infra/packages/pulumi/src/vercel/vercelApp.ts index 279e82562c..2550a8827e 100644 --- a/cloud/infrastructure/src/Vercel/vercelApp.ts +++ b/infra/packages/pulumi/src/vercel/vercelApp.ts @@ -9,7 +9,7 @@ export function vercelApp(prefix: string, name: string, { ignoreCommand?: string; outputDirectory?: string; }) { - new Project(`vercel-${prefix}`, { + const project = new Project(`vercel-${prefix}`, { framework, gitRepository: { productionBranch: 'main', @@ -24,4 +24,8 @@ export function vercelApp(prefix: string, name: string, { rootDirectory: `web/apps/${name}`, serverlessFunctionRegion: 'dub1', }); + + return { + projectId: project.id, + }; } \ No newline at end of file diff --git a/infra/packages/pulumi/tsconfig.json b/infra/packages/pulumi/tsconfig.json new file mode 100644 index 0000000000..f9914f1a15 --- /dev/null +++ b/infra/packages/pulumi/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@infra/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + }, + "include": [ + "./src/**/*.ts", + "./.eslintrc.cjs" + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/infra/packages/typescript-config/app.json b/infra/packages/typescript-config/app.json new file mode 100644 index 0000000000..c2edc2f77c --- /dev/null +++ b/infra/packages/typescript-config/app.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "App", + "extends": "./base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true + } +} \ No newline at end of file diff --git a/infra/packages/typescript-config/base.json b/infra/packages/typescript-config/base.json new file mode 100644 index 0000000000..04e471d0e3 --- /dev/null +++ b/infra/packages/typescript-config/base.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "incremental": true, + "isolatedModules": true, + "lib": [ + "ESNext" + ], + "module": "NodeNext", + "moduleDetection": "force", + "moduleResolution": "NodeNext", + "noUncheckedIndexedAccess": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ESNext" + } +} \ No newline at end of file diff --git a/infra/packages/typescript-config/package.json b/infra/packages/typescript-config/package.json new file mode 100644 index 0000000000..7a07828b0d --- /dev/null +++ b/infra/packages/typescript-config/package.json @@ -0,0 +1,9 @@ +{ + "name": "@infra/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/cloud/infrastructure/pnpm-lock.yaml b/infra/pnpm-lock.yaml similarity index 62% rename from cloud/infrastructure/pnpm-lock.yaml rename to infra/pnpm-lock.yaml index b407561410..db94cb7b79 100644 --- a/cloud/infrastructure/pnpm-lock.yaml +++ b/infra/pnpm-lock.yaml @@ -4,63 +4,304 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@checkly/pulumi': - specifier: 1.1.4 - version: 1.1.4 - '@pulumi/aws': - specifier: 6.14.0 - version: 6.14.0 - '@pulumi/azure-native': - specifier: 2.22.0 - version: 2.22.0 - '@pulumi/cloudflare': - specifier: 5.16.0 - version: 5.16.0 - '@pulumi/command': - specifier: 0.9.2 - version: 0.9.2 - '@pulumi/docker': - specifier: 4.5.0 - version: 4.5.0 - '@pulumi/pulumi': - specifier: 3.97.0 - version: 3.97.0 - '@pulumiverse/vercel': - specifier: 1.0.1 - version: 1.0.1 - -devDependencies: - '@types/node': - specifier: 20.10.4 - version: 20.10.4 - '@typescript-eslint/eslint-plugin': - specifier: 6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: 6.14.0 - version: 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: - specifier: 8.56.0 - version: 8.56.0 - eslint-config-standard: - specifier: 17.1.0 - version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) - eslint-plugin-import: - specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-n: - specifier: 16.4.0 - version: 16.4.0(eslint@8.56.0) - eslint-plugin-node: - specifier: 11.1.0 - version: 11.1.0(eslint@8.56.0) - eslint-plugin-promise: - specifier: 6.1.1 - version: 6.1.1(eslint@8.56.0) - typescript: - specifier: 5.3.3 - version: 5.3.3 +importers: + + .: + devDependencies: + '@infra/eslint-config': + specifier: workspace:* + version: link:packages/eslint-config + '@infra/typescript-config': + specifier: workspace:* + version: link:packages/typescript-config + turbo: + specifier: latest + version: 1.11.2 + + apps/cloud-primary: + dependencies: + '@checkly/pulumi': + specifier: 1.1.4 + version: 1.1.4 + '@pulumi/aws': + specifier: 6.15.0 + version: 6.15.0 + '@pulumi/azure-native': + specifier: 2.22.1 + version: 2.22.1 + '@pulumi/cloudflare': + specifier: 5.16.0 + version: 5.16.0 + '@pulumi/command': + specifier: 0.9.2 + version: 0.9.2 + '@pulumi/docker': + specifier: 4.5.0 + version: 4.5.0 + '@pulumi/pulumi': + specifier: 3.98.0 + version: 3.98.0 + '@pulumiverse/vercel': + specifier: 1.0.1 + version: 1.0.1 + devDependencies: + '@infra/pulumi': + specifier: workspace:* + version: link:../../packages/pulumi + '@types/node': + specifier: 20.10.5 + version: 20.10.5 + '@typescript-eslint/eslint-plugin': + specifier: 6.15.0 + version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: 6.15.0 + version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: + specifier: 8.56.0 + version: 8.56.0 + eslint-config-standard: + specifier: 17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-n: + specifier: 16.4.0 + version: 16.4.0(eslint@8.56.0) + eslint-plugin-node: + specifier: 11.1.0 + version: 11.1.0(eslint@8.56.0) + eslint-plugin-promise: + specifier: 6.1.1 + version: 6.1.1(eslint@8.56.0) + tsup: + specifier: 8.0.1 + version: 8.0.1(typescript@5.3.3) + typescript: + specifier: 5.3.3 + version: 5.3.3 + + apps/remote-browser: + dependencies: + '@checkly/pulumi': + specifier: 1.1.4 + version: 1.1.4 + '@pulumi/aws': + specifier: 6.15.0 + version: 6.15.0 + '@pulumi/azure-native': + specifier: 2.22.1 + version: 2.22.1 + '@pulumi/cloudflare': + specifier: 5.16.0 + version: 5.16.0 + '@pulumi/command': + specifier: 0.9.2 + version: 0.9.2 + '@pulumi/docker': + specifier: 4.5.0 + version: 4.5.0 + '@pulumi/pulumi': + specifier: 3.98.0 + version: 3.98.0 + '@pulumiverse/vercel': + specifier: 1.0.1 + version: 1.0.1 + devDependencies: + '@infra/pulumi': + specifier: workspace:* + version: link:../../packages/pulumi + '@types/node': + specifier: 20.10.5 + version: 20.10.5 + '@typescript-eslint/eslint-plugin': + specifier: 6.15.0 + version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: 6.15.0 + version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: + specifier: 8.56.0 + version: 8.56.0 + eslint-config-standard: + specifier: 17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-n: + specifier: 16.4.0 + version: 16.4.0(eslint@8.56.0) + eslint-plugin-node: + specifier: 11.1.0 + version: 11.1.0(eslint@8.56.0) + eslint-plugin-promise: + specifier: 6.1.1 + version: 6.1.1(eslint@8.56.0) + tsup: + specifier: 8.0.1 + version: 8.0.1(typescript@5.3.3) + typescript: + specifier: 5.3.3 + version: 5.3.3 + + apps/uier: + dependencies: + '@checkly/pulumi': + specifier: 1.1.4 + version: 1.1.4 + '@pulumi/aws': + specifier: 6.15.0 + version: 6.15.0 + '@pulumi/azure-native': + specifier: 2.22.1 + version: 2.22.1 + '@pulumi/cloudflare': + specifier: 5.16.0 + version: 5.16.0 + '@pulumi/command': + specifier: 0.9.2 + version: 0.9.2 + '@pulumi/docker': + specifier: 4.5.0 + version: 4.5.0 + '@pulumi/pulumi': + specifier: 3.98.0 + version: 3.98.0 + '@pulumiverse/vercel': + specifier: 1.0.1 + version: 1.0.1 + devDependencies: + '@infra/pulumi': + specifier: workspace:* + version: link:../../packages/pulumi + '@types/node': + specifier: 20.10.5 + version: 20.10.5 + '@typescript-eslint/eslint-plugin': + specifier: 6.15.0 + version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: 6.15.0 + version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: + specifier: 8.56.0 + version: 8.56.0 + eslint-config-standard: + specifier: 17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-n: + specifier: 16.4.0 + version: 16.4.0(eslint@8.56.0) + eslint-plugin-node: + specifier: 11.1.0 + version: 11.1.0(eslint@8.56.0) + eslint-plugin-promise: + specifier: 6.1.1 + version: 6.1.1(eslint@8.56.0) + tsup: + specifier: 8.0.1 + version: 8.0.1(typescript@5.3.3) + typescript: + specifier: 5.3.3 + version: 5.3.3 + + packages/eslint-config: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: 6.15.0 + version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: 6.15.0 + version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-config-turbo: + specifier: 1.11.2 + version: 1.11.2(eslint@8.56.0) + eslint-import-resolver-typescript: + specifier: 3.6.1 + version: 3.6.1(@typescript-eslint/parser@6.15.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-only-warn: + specifier: 1.1.0 + version: 1.1.0 + typescript: + specifier: 5.3.3 + version: 5.3.3 + + packages/pulumi: + dependencies: + '@checkly/pulumi': + specifier: 1.1.4 + version: 1.1.4 + '@pulumi/aws': + specifier: 6.15.0 + version: 6.15.0 + '@pulumi/azure-native': + specifier: 2.22.1 + version: 2.22.1 + '@pulumi/cloudflare': + specifier: 5.16.0 + version: 5.16.0 + '@pulumi/command': + specifier: 0.9.2 + version: 0.9.2 + '@pulumi/docker': + specifier: 4.5.0 + version: 4.5.0 + '@pulumi/pulumi': + specifier: 3.98.0 + version: 3.98.0 + '@pulumiverse/vercel': + specifier: 1.0.1 + version: 1.0.1 + devDependencies: + '@infra/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@infra/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: 20.10.5 + version: 20.10.5 + '@typescript-eslint/eslint-plugin': + specifier: 6.15.0 + version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: 6.15.0 + version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: + specifier: 8.56.0 + version: 8.56.0 + eslint-config-standard: + specifier: 17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-n: + specifier: 16.4.0 + version: 16.4.0(eslint@8.56.0) + eslint-plugin-node: + specifier: 11.1.0 + version: 11.1.0(eslint@8.56.0) + eslint-plugin-promise: + specifier: 6.1.1 + version: 6.1.1(eslint@8.56.0) + typescript: + specifier: 5.3.3 + version: 5.3.3 + + packages/typescript-config: {} packages: @@ -73,11 +314,218 @@ packages: resolution: {integrity: sha512-YPNYtwEnKu23VDHNFu91xd/Ueu5zYONHcYwKDA5qTvtgZZ1nzrvPJgrO15KF0fLRVlGo7yckirDS26GpvBTe6w==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 transitivePeerDependencies: - supports-color dev: false + /@esbuild/aix-ppc64@0.19.10: + resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.10: + resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.10: + resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.10: + resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.10: + resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.10: + resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.10: + resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.10: + resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.10: + resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.10: + resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.10: + resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.10: + resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.10: + resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.10: + resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.10: + resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.10: + resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.10: + resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.10: + resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.10: + resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.10: + resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.10: + resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.10: + resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.10: + resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -88,8 +536,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.6.2: - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -100,8 +548,8 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.20.0 - ignore: 5.2.4 + globals: 13.23.0 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -120,7 +568,7 @@ packages: engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.10 - '@types/node': 20.10.4 + '@types/node': 20.10.5 dev: false /@grpc/proto-loader@0.7.10: @@ -130,7 +578,7 @@ packages: dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.4 + protobufjs: 7.2.5 yargs: 17.7.2 dev: false @@ -154,6 +602,36 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@logdna/tail-file@2.2.0: resolution: {integrity: sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==} engines: {node: '>=10.3.0'} @@ -185,67 +663,67 @@ packages: engines: {node: '>=14'} deprecated: Please use @opentelemetry/api >= 1.3.0 dependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': 1.7.0 dev: false - /@opentelemetry/api@1.4.1: - resolution: {integrity: sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==} + /@opentelemetry/api@1.7.0: + resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-PmwAanPNWCyS9JYFzhzVzHgviLhc0UHjOwdth+hp3HgQQ9XZZNE635P8JhAUHZmbghW9/qQFafRWOS4VN9VVnQ==} + /@opentelemetry/context-async-hooks@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-0i1ECOc9daKK3rjUgDDXf0GDD5XfCou5lXnt2DALIc2qKoruPPcesobNKE54laSVUWnC3jX26RzuOa31g0V32A==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': 1.7.0 dev: false - /@opentelemetry/core@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-4DWYNb3dLs2mSCGl65jY3aEgbvPWSHVQV/dmDWiYeWUrMakZQFcymqZOSUNZO0uDrEJoxMu8O5tZktX6UKFwag==} + /@opentelemetry/core@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/semantic-conventions': 1.19.0 dev: false - /@opentelemetry/exporter-zipkin@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-HJ4ww7OjVIV4x5ZGgY+h+D1JS0GsCtnHuqZUVHl7EFFQxMGpbQcf5eISRtwqgQwlQKh2iqrEbiHdDyzbgA/7XQ==} + /@opentelemetry/exporter-zipkin@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-TY1fy4JiOBN5a8T9fknqTMcz0DXIeFBr6sklaLCgwtj+G699a5R4CekNwpeM7DHSwC44UMX7gljO2I6dYsTS3A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/resources': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/sdk-trace-base': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 dev: false - /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.4.1): + /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-Az6wdkPx/Mi26lT9LKFV6GhCA9prwQFPz5eCNSExTnSP49YhQ7XCjzPd2POPeLKt84ICitrBMdE1mj0zbPdLAQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': 1.7.0 '@opentelemetry/api-metrics': 0.32.0 - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.4.1) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': 1.6.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.4.1): + /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-y6ADjHpkUz/v1nkyyYjsQa/zorhX+0qVGpFvXMcbjU4sHnBnC02c6wcc93sIgZfiQClIWo45TGku1KQxJ5UUbQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': 1.7.0 '@opentelemetry/api-metrics': 0.32.0 require-in-the-middle: 5.2.0 semver: 7.5.4 @@ -254,66 +732,66 @@ packages: - supports-color dev: false - /@opentelemetry/propagator-b3@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-WFcn98075QPc2zE1obhKydJHUehI5/HuLoelPEVwATj+487hjCwjHj9r2fgmQkWpvuNSB7CJaA0ys6qqq1N6lg==} + /@opentelemetry/propagator-b3@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-v7y5IBOKBm0vP3yf0DHzlw4L2gL6tZ0KeeMTaxfO5IuomMffDbrGWcvYFp0Dt4LdZctTSK523rVLBB9FBHBciQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) dev: false - /@opentelemetry/propagator-jaeger@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-ugtWF7GC6X5RIJ0+iMwW2iVAGNs206CAeq8XQ8OkJRg+v0lp4H0/i+gJ4hubTT8NIL5a3IxtIrAENPLIGdLucQ==} + /@opentelemetry/propagator-jaeger@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-dedkOoTzKg+nYoLWCMp0Im+wo+XkTRW6aXhi8VQRtMW/9SNJGOllCJSu8llToLxMDF0+6zu7OCrKkevAof2tew==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) dev: false - /@opentelemetry/resources@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-gunMKXG0hJrR0LXrqh7BVbziA/+iJBL3ZbXCXO64uY+SrExkwoyJkpiq9l5ismkGF/A20mDEV7tGwh+KyPw00Q==} + /@opentelemetry/resources@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 dev: false - /@opentelemetry/sdk-trace-base@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-pfCOB3tNDlYVoWuz4D7Ji+Jmy9MHnATWHVpkERdCEiwUGEZ+4IvNPXUcPc37wJVmMpjGLeaWgPPrie0KIpWf1A==} + /@opentelemetry/sdk-trace-base@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/resources': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 dev: false - /@opentelemetry/sdk-trace-node@1.12.0(@opentelemetry/api@1.4.1): - resolution: {integrity: sha512-PxpDemnNZLLeFNLAu95/K3QubjlaScXVjVQPlwPui65VRxIvxGVysnN7DFfsref+qoh1hI6nlrYSij43vxdm2w==} + /@opentelemetry/sdk-trace-node@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-TCiEq/cUjM15RFqBRwWomTVbOqzndWL4ILa7ZCu0zbjU1/XY6AgHkgrgAc7vGP6TjRqH4Xryuglol8tcIfbBUQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/context-async-hooks': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/core': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/propagator-b3': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/propagator-jaeger': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/sdk-trace-base': 1.12.0(@opentelemetry/api@1.4.1) + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/context-async-hooks': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-b3': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-jaeger': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) semver: 7.5.4 dev: false - /@opentelemetry/semantic-conventions@1.12.0: - resolution: {integrity: sha512-hO+bdeGOlJwqowUBoZF5LyP3ORUFOP1G0GRv8N45W/cztXbT2ZEXaAzfokRS9Xc9FWmYrDj32mF6SzH6wuoIyA==} + /@opentelemetry/semantic-conventions@1.19.0: + resolution: {integrity: sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==} engines: {node: '>=14'} dev: false @@ -365,10 +843,10 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@pulumi/aws@6.14.0: - resolution: {integrity: sha512-dOTdUkRdV0IU7HCHpMDRMF2co4d4iBWeGmuxq/mLYt0PdVMsUsVsMJ87xAIP2S3g0kTVLNOzL1l8EP24OS1vlg==} + /@pulumi/aws@6.15.0: + resolution: {integrity: sha512-ZAk1VJDM1Hn5Kr+8elPvH4yuRP0Gmpv9YUdqoYHcEIsjg4BtUXaS0Db7KmSKoUf1SmQRkBCdOqRBcit7RorpUA==} dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -377,10 +855,10 @@ packages: - supports-color dev: false - /@pulumi/azure-native@2.22.0: - resolution: {integrity: sha512-HutD/G2iCOh/CfYlVf1KTDLi9wn8ilwAzpdwYsndpkWRVihooK20ZxcjUOr/8VOC3wZvo56OCNsE+YCrb8oqJQ==} + /@pulumi/azure-native@2.22.1: + resolution: {integrity: sha512-X/apQqagDZt+2uR9p4tQGb3dm9SYLzCabSG3j5rQ8XJk3/qrDRs8wi+k62hJfMoUJv1QihEFZsLBntph2HIRLw==} dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 transitivePeerDependencies: - supports-color dev: false @@ -388,7 +866,7 @@ packages: /@pulumi/cloudflare@5.16.0: resolution: {integrity: sha512-7FjJIpsGz9lv+o+nNnbV8UOUXAF248LHCILmExxIfVTblwbp0Mb8Ri68rLOK9qpVPOIwkj2QBorLiZ6Y4anHSg==} dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 transitivePeerDependencies: - supports-color dev: false @@ -397,7 +875,7 @@ packages: resolution: {integrity: sha512-9RaGDiy8jFCiaarj4EOrMW/fVCM/AgBigzwM6CKzlR49x8UFiRDmKrXfEVHb8r2P9IpC4IaAZf5VbNNAHwN/rA==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 transitivePeerDependencies: - supports-color dev: false @@ -405,26 +883,26 @@ packages: /@pulumi/docker@4.5.0: resolution: {integrity: sha512-DOiczZK1cF4NGlEWzacPLjGcoPKXHXISoqq4KqCO97YW28rZSu6LOdveQ8tLaUHGeyWQ+CS3PT45caSxHAbzbw==} dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 semver: 5.7.2 transitivePeerDependencies: - supports-color dev: false - /@pulumi/pulumi@3.97.0: - resolution: {integrity: sha512-yPtC/RUHHV8FgcRmq/l05ZyVwcIjLIA+7F+sCceKSNga0NOno6D/VD3PRU/TkApTseKRce4NQgdshXDumh+mdA==} + /@pulumi/pulumi@3.98.0: + resolution: {integrity: sha512-G5LpwM7CvR5hLvyscgWp5TVVJYTOJqeLSL0uTUtHSBz/Tpiqv1lgygW8oUIUD4gPm33UfcK1cVejCASdQk+74Q==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: '@grpc/grpc-js': 1.9.6 '@logdna/tail-file': 2.2.0 - '@opentelemetry/api': 1.4.1 - '@opentelemetry/exporter-zipkin': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.4.1) - '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.4.1) - '@opentelemetry/resources': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/sdk-trace-base': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/sdk-trace-node': 1.12.0(@opentelemetry/api@1.4.1) - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/exporter-zipkin': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 '@pulumi/query': 0.3.0 '@types/google-protobuf': 3.15.12 execa: 5.1.1 @@ -452,11 +930,115 @@ packages: /@pulumiverse/vercel@1.0.1: resolution: {integrity: sha512-AOiOe2pzZOQVv9Z+C/iWmZeKpeZb+0qmqcfRBnYiU4DiVr9VhqE9ToJVPq7ElyxgYSoETA+4qfd1Kj01zxhd5A==} dependencies: - '@pulumi/pulumi': 3.97.0 + '@pulumi/pulumi': 3.98.0 transitivePeerDependencies: - supports-color dev: false + /@rollup/rollup-android-arm-eabi@4.9.1: + resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.1: + resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.1: + resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.1: + resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.1: + resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.1: + resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.1: + resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.1: + resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.1: + resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.1: + resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.1: + resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.1: + resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.1: + resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@types/google-protobuf@3.15.12: resolution: {integrity: sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==} dev: false @@ -469,8 +1051,8 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/node@20.10.4: - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} dependencies: undici-types: 5.26.5 @@ -478,8 +1060,8 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -489,26 +1071,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.3.3) + ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -517,10 +1099,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -528,16 +1110,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + /@typescript-eslint/scope-manager@6.15.0: + resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/visitor-keys': 6.15.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -546,23 +1128,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 - ts-api-utils: 1.0.1(typescript@5.3.3) + ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + /@typescript-eslint/types@6.15.0: + resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + /@typescript-eslint/typescript-estree@6.15.0(typescript@5.3.3): + resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -570,20 +1152,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.3.3) + ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -591,9 +1173,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -601,11 +1183,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + /@typescript-eslint/visitor-keys@6.15.0: + resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/types': 6.15.0 eslint-visitor-keys: 3.4.3 dev: true @@ -613,16 +1195,16 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /acorn-jsx@5.3.2(acorn@8.9.0): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: true - /acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -646,6 +1228,18 @@ packages: dependencies: color-convert: 2.0.1 + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -667,7 +1261,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 is-string: 1.0.7 @@ -683,9 +1277,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 - es-shim-unscopables: 1.0.0 + es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 dev: true @@ -694,9 +1288,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 - es-shim-unscopables: 1.0.0 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.flatmap@1.3.2: @@ -704,17 +1298,17 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 - es-shim-unscopables: 1.0.0 + es-shim-unscopables: 1.0.2 dev: true - /array.prototype.reduce@1.0.5: - resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 @@ -726,7 +1320,7 @@ packages: dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 @@ -748,6 +1342,11 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -781,6 +1380,21 @@ packages: semver: 7.5.4 dev: true + /bundle-require@4.0.2(esbuild@0.19.10): + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.19.10 + load-tsconfig: 0.2.5 + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -801,6 +1415,21 @@ packages: supports-color: 7.2.0 dev: true + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -819,6 +1448,11 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -838,7 +1472,7 @@ packages: supports-color: optional: true dependencies: - ms: 2.1.3 + ms: 2.1.2 dev: true /debug@4.3.4: @@ -867,13 +1501,14 @@ packages: dependencies: get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 /dezalgo@1.0.4: @@ -909,10 +1544,23 @@ packages: esutils: 2.0.3 dev: true + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /es-abstract@1.22.3: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} @@ -921,18 +1569,18 @@ packages: arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.5 - es-set-tostringtag: 2.0.1 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - internal-slot: 1.0.5 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -961,18 +1609,18 @@ packages: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: false - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.2 - has: 1.0.3 has-tostringtag: 1.0.0 + hasown: 2.0.0 - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: @@ -983,6 +1631,37 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /esbuild@0.19.10: + resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.10 + '@esbuild/android-arm': 0.19.10 + '@esbuild/android-arm64': 0.19.10 + '@esbuild/android-x64': 0.19.10 + '@esbuild/darwin-arm64': 0.19.10 + '@esbuild/darwin-x64': 0.19.10 + '@esbuild/freebsd-arm64': 0.19.10 + '@esbuild/freebsd-x64': 0.19.10 + '@esbuild/linux-arm': 0.19.10 + '@esbuild/linux-arm64': 0.19.10 + '@esbuild/linux-ia32': 0.19.10 + '@esbuild/linux-loong64': 0.19.10 + '@esbuild/linux-mips64el': 0.19.10 + '@esbuild/linux-ppc64': 0.19.10 + '@esbuild/linux-riscv64': 0.19.10 + '@esbuild/linux-s390x': 0.19.10 + '@esbuild/linux-x64': 0.19.10 + '@esbuild/netbsd-x64': 0.19.10 + '@esbuild/openbsd-x64': 0.19.10 + '@esbuild/sunos-x64': 0.19.10 + '@esbuild/win32-arm64': 0.19.10 + '@esbuild/win32-ia32': 0.19.10 + '@esbuild/win32-x64': 0.19.10 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -1002,6 +1681,15 @@ packages: eslint: 8.56.0 dev: true + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} @@ -1012,11 +1700,20 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-n: 16.4.0(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + dev: true + /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: @@ -1027,7 +1724,30 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.15.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1048,10 +1768,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.15.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true @@ -1063,7 +1784,7 @@ packages: eslint: '>=8' dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 + '@eslint-community/regexpp': 4.10.0 eslint: 8.56.0 eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true @@ -1079,7 +1800,7 @@ packages: regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -1089,7 +1810,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -1098,7 +1819,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1124,8 +1845,8 @@ packages: builtins: 5.0.1 eslint: 8.56.0 eslint-plugin-es-x: 7.5.0(eslint@8.56.0) - get-tsconfig: 4.7.0 - ignore: 5.2.4 + get-tsconfig: 4.7.2 + ignore: 5.3.0 is-builtin-module: 3.2.1 is-core-module: 2.13.1 minimatch: 3.1.2 @@ -1142,12 +1863,17 @@ packages: eslint: 8.56.0 eslint-plugin-es: 3.0.1(eslint@8.56.0) eslint-utils: 2.1.0 - ignore: 5.2.4 + ignore: 5.3.0 minimatch: 3.1.2 - resolve: 1.22.2 + resolve: 1.22.8 semver: 6.3.1 dev: true + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true + /eslint-plugin-promise@6.1.1(eslint@8.56.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1157,6 +1883,15 @@ packages: eslint: 8.56.0 dev: true + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.56.0 + dev: true + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1188,7 +1923,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 + '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.13 @@ -1210,9 +1945,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.23.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -1233,8 +1968,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 dev: true @@ -1281,14 +2016,13 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: false /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1362,6 +2096,14 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1370,7 +2112,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 @@ -1393,7 +2135,6 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: false /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -1402,8 +2143,8 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 - /get-tsconfig@4.7.0: - resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -1422,6 +2163,17 @@ packages: is-glob: 4.0.3 dev: true + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -1432,8 +2184,8 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -1443,7 +2195,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -1451,8 +2203,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 + fast-glob: 3.3.1 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -1468,7 +2220,6 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1482,8 +2233,8 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: get-intrinsic: 1.2.2 @@ -1501,12 +2252,6 @@ packages: dependencies: has-symbols: 1.0.3 - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.2 - /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} @@ -1527,10 +2272,9 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: false - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -1561,12 +2305,12 @@ packages: engines: {node: '>=10'} dev: false - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.2 - has: 1.0.3 + hasown: 2.0.0 side-channel: 1.0.4 /is-array-buffer@3.0.2: @@ -1581,6 +2325,13 @@ packages: dependencies: has-bigints: 1.0.2 + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -1662,7 +2413,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -1693,6 +2443,11 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -1735,6 +2490,20 @@ packages: type-check: 0.4.0 dev: true + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1757,6 +2526,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} dev: false @@ -1773,7 +2546,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -1797,7 +2569,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1821,8 +2592,12 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 dev: true /natural-compare@1.4.0: @@ -1848,6 +2623,11 @@ packages: validate-npm-package-license: 3.0.4 dev: false + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + /npm-normalize-package-bin@1.0.1: resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} dev: false @@ -1857,7 +2637,11 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -1871,7 +2655,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -1880,17 +2664,17 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 dev: true - /object.getownpropertydescriptors@2.1.6: - resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} engines: {node: '>= 0.8'} dependencies: - array.prototype.reduce: 1.0.5 + array.prototype.reduce: 1.0.6 call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 safe-array-concat: 1.0.1 dev: false @@ -1899,7 +2683,7 @@ packages: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 dev: true @@ -1909,7 +2693,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -1923,7 +2707,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: false /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -2003,6 +2786,11 @@ packages: engines: {node: '>=8.6'} dev: true + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + /pkg-dir@7.0.0: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} @@ -2010,13 +2798,29 @@ packages: find-up: 6.3.0 dev: false + /postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + yaml: 2.3.4 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /protobufjs@7.2.4: - resolution: {integrity: sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==} + /protobufjs@7.2.5: + resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -2030,7 +2834,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.10.4 + '@types/node': 20.10.5 long: 5.2.3 dev: false @@ -2071,12 +2875,19 @@ packages: once: 1.4.0 dev: false + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 set-function-name: 2.0.1 /regexpp@3.2.0: @@ -2110,17 +2921,13 @@ packages: engines: {node: '>=4'} dev: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true /resolve@1.22.8: @@ -2143,6 +2950,27 @@ packages: glob: 7.2.3 dev: true + /rollup@4.9.1: + resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.1 + '@rollup/rollup-android-arm64': 4.9.1 + '@rollup/rollup-darwin-arm64': 4.9.1 + '@rollup/rollup-darwin-x64': 4.9.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 + '@rollup/rollup-linux-arm64-gnu': 4.9.1 + '@rollup/rollup-linux-arm64-musl': 4.9.1 + '@rollup/rollup-linux-riscv64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-musl': 4.9.1 + '@rollup/rollup-win32-arm64-msvc': 4.9.1 + '@rollup/rollup-win32-ia32-msvc': 4.9.1 + '@rollup/rollup-win32-x64-msvc': 4.9.1 + fsevents: 2.3.3 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -2189,7 +3017,7 @@ packages: define-data-property: 1.1.1 get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -2197,7 +3025,7 @@ packages: dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -2222,7 +3050,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -2241,11 +3068,18 @@ packages: engines: {node: '>=0.10.0'} dev: false + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 + spdx-license-ids: 3.0.16 dev: false /spdx-exceptions@2.3.0: @@ -2256,11 +3090,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-license-ids: 3.0.16 dev: false - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: false /sprintf-js@1.0.3: @@ -2281,21 +3115,21 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.5 - define-properties: 1.2.0 + define-properties: 1.2.1 es-abstract: 1.22.3 /strip-ansi@6.0.1: @@ -2312,13 +3146,26 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: false /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2330,10 +3177,28 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2341,8 +3206,19 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.0.1(typescript@5.3.3): - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /ts-api-utils@1.0.2(typescript@5.3.3): + resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' @@ -2350,6 +3226,10 @@ packages: typescript: 5.3.3 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + /ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} @@ -2374,6 +3254,105 @@ packages: strip-bom: 3.0.0 dev: true + /tsup@8.0.1(typescript@5.3.3): + resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.2(esbuild@0.19.10) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4 + esbuild: 0.19.10 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2 + resolve-from: 5.0.0 + rollup: 4.9.1 + source-map: 0.8.0-beta.0 + sucrase: 3.34.0 + tree-kill: 1.2.2 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /turbo-darwin-64@1.11.2: + resolution: {integrity: sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64@1.11.2: + resolution: {integrity: sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64@1.11.2: + resolution: {integrity: sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64@1.11.2: + resolution: {integrity: sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64@1.11.2: + resolution: {integrity: sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64@1.11.2: + resolution: {integrity: sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo@1.11.2: + resolution: {integrity: sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A==} + hasBin: true + optionalDependencies: + turbo-darwin-64: 1.11.2 + turbo-darwin-arm64: 1.11.2 + turbo-linux-64: 1.11.2 + turbo-linux-arm64: 1.11.2 + turbo-windows-64: 1.11.2 + turbo-windows-arm64: 1.11.2 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2457,7 +3436,7 @@ packages: /util-promisify@2.1.0: resolution: {integrity: sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA==} dependencies: - object.getownpropertydescriptors: 2.1.6 + object.getownpropertydescriptors: 2.1.7 dev: false /validate-npm-package-license@3.0.4: @@ -2467,6 +3446,18 @@ packages: spdx-expression-parse: 3.0.1 dev: false + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -2513,6 +3504,11 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} diff --git a/infra/pnpm-workspace.yaml b/infra/pnpm-workspace.yaml new file mode 100644 index 0000000000..3ff5faaaf5 --- /dev/null +++ b/infra/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "apps/*" + - "packages/*" diff --git a/infra/tsconfig.json b/infra/tsconfig.json new file mode 100644 index 0000000000..5d19674cd3 --- /dev/null +++ b/infra/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@infra/typescript-config/base.json" +} diff --git a/infra/turbo.json b/infra/turbo.json new file mode 100644 index 0000000000..2961406b66 --- /dev/null +++ b/infra/turbo.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://turbo.build/schema.json", + "globalDependencies": [ + "**/.env.*local" + ], + "pipeline": { + "build": { + "dependsOn": [ + "^build" + ] + }, + "lint": { + "dependsOn": [ + "^lint" + ] + }, + "preview": { + "dependsOn": [ + "build" + ] + }, + "deploy": { + "dependsOn": [ + "build" + ] + } + } +} diff --git a/renovate.json b/renovate.json index 00fa6ebf58..68fcd9986b 100644 --- a/renovate.json +++ b/renovate.json @@ -93,6 +93,7 @@ ], "dependencyDashboard": true, "assigneesFromCodeOwners": true, + "reviewersFromCodeOwners": true, "baseBranches": [ "next" ], diff --git a/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj b/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj index a69740b9f6..8f0cb8ae3f 100644 --- a/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj +++ b/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj @@ -18,7 +18,7 @@ - + diff --git a/station/Signal.Beacon.Voice/VoiceService.cs b/station/Signal.Beacon.Voice/VoiceService.cs index 904a4cc67e..6843796fa4 100644 --- a/station/Signal.Beacon.Voice/VoiceService.cs +++ b/station/Signal.Beacon.Voice/VoiceService.cs @@ -476,7 +476,8 @@ private bool GetNextFrameByte(int frameLength, ref byte[] buffer) throw new NullReferenceException("Capture device not initialized."); if (frameLength <= 0) throw new ArgumentOutOfRangeException(nameof(frameLength)); - if (ALC.GetAvailableSamples(this.captureDevice.Value) < frameLength) + var samples = ALC.GetInteger(this.captureDevice.Value, AlcGetInteger.CaptureSamples); + if (samples < frameLength) return false; if (buffer == null) throw new ArgumentNullException(nameof(buffer)); @@ -494,7 +495,8 @@ private bool GetNextFrame(int frameLength, ref short[] buffer) throw new NullReferenceException("Capture device not initialized."); if (frameLength <= 0) throw new ArgumentOutOfRangeException(nameof(frameLength)); - if (ALC.GetAvailableSamples(this.captureDevice.Value) < frameLength) + var samples = ALC.GetInteger(this.captureDevice.Value, AlcGetInteger.CaptureSamples); + if (samples < frameLength) return false; if (buffer == null) throw new ArgumentNullException(nameof(buffer)); @@ -765,7 +767,7 @@ private async Task PlaySoundAsync(string name) ALC.MakeContextCurrent(this.alContext.Value); this.AlHasError(); - AL.BindBufferToSource(this.alSource.Value, sound.Buffer); + AL.Source(this.alSource.Value, ALSourcei.Buffer, sound.Buffer); this.AlHasError(); AL.SourcePlay(this.alSource.Value); @@ -787,15 +789,17 @@ private Task WaitSourceToStop() return Task.CompletedTask; } - return Task.Run(() => + return Task.Run(async () => { ALSourceState state; do { - state = AL.GetSourceState(this.alSource.Value); + AL.GetSource(this.alSource.Value, ALGetSourcei.SourceState, out var rawState); if (this.AlHasError()) break; - Thread.Yield(); + state = (ALSourceState) rawState; + + await Task.Delay(10); } while (state == ALSourceState.Playing); }); } diff --git a/web/.idea/modules.xml b/web/.idea/modules.xml new file mode 100644 index 0000000000..f589ca37d2 --- /dev/null +++ b/web/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/web/.idea/web.iml b/web/.idea/web.iml new file mode 100644 index 0000000000..24643cc374 --- /dev/null +++ b/web/.idea/web.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/web/apps/app/app/layout.tsx b/web/apps/app/app/layout.tsx index 5788dc65ea..f559c25af0 100644 --- a/web/apps/app/app/layout.tsx +++ b/web/apps/app/app/layout.tsx @@ -2,6 +2,7 @@ import './global.css'; import { PropsWithChildren } from 'react'; import { Inter } from 'next/font/google'; import { Viewport, type Metadata } from 'next'; +import { SpeedInsights } from '@vercel/speed-insights/next'; import { Analytics } from '@vercel/analytics/react'; import { AppLayout } from '../components/layouts/AppLayout'; import { LayoutClientWrapper } from './LayoutClientWrapper'; @@ -21,6 +22,7 @@ export default function RootLayout({ children }: PropsWithChildren) { + ); diff --git a/web/apps/app/package.json b/web/apps/app/package.json index baf4464195..87f9a06b66 100644 --- a/web/apps/app/package.json +++ b/web/apps/app/package.json @@ -27,7 +27,7 @@ "@dnd-kit/sortable": "8.0.0", "@dnd-kit/utilities": "3.2.2", "@enterwell/react-form-builder": "0.3.2", - "@enterwell/react-form-validation": "1.3.0", + "@enterwell/react-form-validation": "1.4.0", "@enterwell/react-hooks": "0.4.1", "@hcaptcha/react-hcaptcha": "1.9.2", "@microsoft/signalr": "8.0.0", @@ -41,11 +41,12 @@ "@signalco/ui-primitives": "workspace:*", "@signalco/ui-notifications": "workspace:*", "@signalco/ui-icons": "workspace:*", - "@tanstack/query-sync-storage-persister": "5.14.0", - "@tanstack/react-query": "5.14.0", - "@tanstack/react-query-devtools": "5.14.0", - "@tanstack/react-query-persist-client": "5.14.0", + "@tanstack/query-sync-storage-persister": "5.14.2", + "@tanstack/react-query": "5.14.2", + "@tanstack/react-query-devtools": "5.14.2", + "@tanstack/react-query-persist-client": "5.14.2", "@vercel/analytics": "1.1.1", + "@vercel/speed-insights": "1.0.2", "@vvo/tzdb": "6.120.0", "autoprefixer": "10.4.16", "classix": "2.1.35", @@ -53,7 +54,7 @@ "color": "4.2.3", "compare-versions": "6.1.0", "d3": "7.8.5", - "date-fns": "2.30.0", + "date-fns": "3.0.1", "monaco-editor": "0.45.0", "next": "14.0.4", "next-secure-headers": "2.2.0", @@ -65,9 +66,9 @@ "react-grid-layout": "1.4.4", "react-transition-group": "4.4.5", "recharts": "2.10.3", - "sharp": "0.33.0", + "sharp": "0.33.1", "suncalc": "1.9.0", - "tailwindcss": "3.3.6", + "tailwindcss": "3.4.0", "tailwindcss-animate": "1.0.7", "uuid": "9.0.1" }, @@ -82,7 +83,7 @@ "@types/color": "3.0.6", "@types/d3": "7.4.3", "@types/next-pwa": "5.6.9", - "@types/node": "20.10.4", + "@types/node": "20.10.5", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "@types/react-grid-layout": "1.3.5", diff --git a/web/apps/blog/package.json b/web/apps/blog/package.json index 87a7dcbe13..ba84254d9d 100644 --- a/web/apps/blog/package.json +++ b/web/apps/blog/package.json @@ -41,8 +41,8 @@ "react-cool-inview": "3.0.1", "react-dom": "18.2.0", "react-transition-group": "4.4.5", - "sharp": "0.33.0", - "tailwindcss": "3.3.6", + "sharp": "0.33.1", + "tailwindcss": "3.4.0", "tailwindcss-animate": "1.0.7" }, "devDependencies": { @@ -56,7 +56,7 @@ "@types/color": "3.0.6", "@types/fs-extra": "11.0.4", "@types/klaw": "3.0.6", - "@types/node": "20.10.4", + "@types/node": "20.10.5", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "colorette": "2.0.20", diff --git a/web/apps/brandgrab/package.json b/web/apps/brandgrab/package.json index 5e3d97cc2e..d62429f302 100644 --- a/web/apps/brandgrab/package.json +++ b/web/apps/brandgrab/package.json @@ -33,7 +33,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-transition-group": "4.4.5", - "sharp": "0.33.0" + "sharp": "0.33.1" }, "devDependencies": { "@axe-core/playwright": "4.8.2", @@ -43,7 +43,7 @@ "@signalco/eslint-config-signalco": "workspace:*", "@signalco/tsconfig": "workspace:*", "@types/color": "3.0.6", - "@types/node": "20.10.4", + "@types/node": "20.10.5", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "@types/sharp": "0.31.1", diff --git a/web/apps/development/package.json b/web/apps/development/package.json deleted file mode 100644 index 15d82c0f3b..0000000000 --- a/web/apps/development/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "development", - "private": true, - "homepage": "https://www.signalco.dev/", - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite --open" - }, - "dependencies": { - "@signalco/ui": "workspace:*", - "@signalco/ui-primitives": "workspace:*", - "@signalco/tailwindcss-config-signalco": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", - "tailwindcss": "3.3.6", - "tailwindcss-animate": "1.0.7" - }, - "devDependencies": { - "@types/react": "18.2.45", - "@types/react-dom": "18.2.18", - "@vitejs/plugin-react-swc": "3.5.0", - "typescript": "5.3.3", - "vite": "5.0.10" - } -} \ No newline at end of file diff --git a/web/apps/doprocess/.vscode/launch.json b/web/apps/doprocess/.vscode/launch.json index a222c376f9..09726c2c68 100644 --- a/web/apps/doprocess/.vscode/launch.json +++ b/web/apps/doprocess/.vscode/launch.json @@ -15,7 +15,7 @@ "type": "msedge", "request": "launch", "userDataDir": false, - "url": "http://localhost:4002", + "url": "http://localhost:4003", "smartStep": true }, { diff --git a/web/apps/doprocess/package.json b/web/apps/doprocess/package.json index a8e9d2f51b..b47e77244b 100644 --- a/web/apps/doprocess/package.json +++ b/web/apps/doprocess/package.json @@ -40,8 +40,8 @@ "@signalco/ui-icons": "workspace:*", "@signalco/ui-notifications": "workspace:*", "@signalco/ui-primitives": "workspace:*", - "@tanstack/react-query": "5.14.0", - "@tanstack/react-query-devtools": "5.14.0", + "@tanstack/react-query": "5.14.2", + "@tanstack/react-query-devtools": "5.14.2", "@vercel/analytics": "1.1.1", "classix": "2.1.35", "drizzle-orm": "0.29.1", @@ -49,13 +49,13 @@ "next": "14.0.4", "next-secure-headers": "2.2.0", "next-themes": "0.2.1", - "openai": "4.22.1", + "openai": "4.24.0", "react": "18.2.0", "react-cool-inview": "3.0.1", "react-dom": "18.2.0", "react-transition-group": "4.4.5", - "sharp": "0.33.0", - "tailwindcss": "3.3.6", + "sharp": "0.33.1", + "tailwindcss": "3.4.0", "tailwindcss-animate": "1.0.7" }, "devDependencies": { @@ -68,12 +68,12 @@ "@signalco/tsconfig": "workspace:*", "@total-typescript/ts-reset": "0.5.1", "@types/color": "3.0.6", - "@types/node": "20.10.4", + "@types/node": "20.10.5", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "cross-env": "7.0.3", "dotenv": "16.3.1", - "drizzle-kit": "0.20.6", + "drizzle-kit": "0.20.7", "eslint": "8.56.0", "eslint-plugin-drizzle": "0.2.2", "next-sitemap": "4.2.3", diff --git a/web/apps/slco/package.json b/web/apps/slco/package.json index ec0cb5a797..7936b5eaae 100644 --- a/web/apps/slco/package.json +++ b/web/apps/slco/package.json @@ -32,8 +32,8 @@ "react-cool-inview": "3.0.1", "react-dom": "18.2.0", "react-transition-group": "4.4.5", - "sharp": "0.33.0", - "tailwindcss": "3.3.6", + "sharp": "0.33.1", + "tailwindcss": "3.4.0", "tailwindcss-animate": "1.0.7" }, "devDependencies": { @@ -45,7 +45,7 @@ "@signalco/tsconfig": "workspace:*", "@total-typescript/ts-reset": "0.5.1", "@types/color": "3.0.6", - "@types/node": "20.10.4", + "@types/node": "20.10.5", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "cross-env": "7.0.3", diff --git a/web/apps/ui-docs/package.json b/web/apps/ui-docs/package.json index ab63f53fa9..f41b475c20 100644 --- a/web/apps/ui-docs/package.json +++ b/web/apps/ui-docs/package.json @@ -15,15 +15,15 @@ "devDependencies": { "@babel/core": "7.23.6", "@signalco/tsconfig": "workspace:*", - "@storybook/addon-essentials": "7.6.5", - "@storybook/addon-links": "7.6.5", + "@storybook/addon-essentials": "7.6.6", + "@storybook/addon-links": "7.6.6", "@storybook/addon-styling-webpack": "0.0.5", - "@storybook/addon-themes": "7.6.5", - "@storybook/addons": "7.6.5", - "@storybook/manager-api": "7.6.5", - "@storybook/nextjs": "7.6.5", - "@storybook/react": "7.6.5", - "@storybook/theming": "7.6.5", + "@storybook/addon-themes": "7.6.6", + "@storybook/addons": "7.6.6", + "@storybook/manager-api": "7.6.6", + "@storybook/nextjs": "7.6.6", + "@storybook/react": "7.6.6", + "@storybook/theming": "7.6.6", "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "autoprefixer": "10.4.16", @@ -33,11 +33,11 @@ "rimraf": "5.0.5", "sass": "1.69.5", "sass-loader": "13.3.2", - "storybook": "7.6.5", + "storybook": "7.6.6", "storybook-addon-swc": "1.2.0", "style-loader": "3.3.3", "styled-jsx": "5.1.2", - "tailwindcss": "3.3.6", + "tailwindcss": "3.4.0", "tailwindcss-animate": "1.0.7", "typescript": "5.3.3", "webpack": "5.89.0" diff --git a/web/apps/uier/.editorconfig b/web/apps/uier/.editorconfig new file mode 100644 index 0000000000..6aa8a118d3 --- /dev/null +++ b/web/apps/uier/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{js,ts,json,yml}] +charset = utf-8 +indent_style = space +indent_size = 4 diff --git a/web/apps/uier/.env.example b/web/apps/uier/.env.example new file mode 100644 index 0000000000..e69de29bb2 diff --git a/web/apps/uier/.eslintrc.cjs b/web/apps/uier/.eslintrc.cjs new file mode 100644 index 0000000000..b10b311de1 --- /dev/null +++ b/web/apps/uier/.eslintrc.cjs @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['@signalco/eslint-config-signalco'], +}; diff --git a/web/apps/uier/.gitignore b/web/apps/uier/.gitignore new file mode 100644 index 0000000000..5807f19430 --- /dev/null +++ b/web/apps/uier/.gitignore @@ -0,0 +1,451 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +.vercel + +# Sitemap +**/public/sitemap* + +.turbo +.swc +test-results/ + +# PWA +**/public/workbox-*.js +**/public/sw.js +**/public/fallback-*.js +**/public/worker-*.js diff --git a/web/apps/uier/.vscode/extensions.json b/web/apps/uier/.vscode/extensions.json new file mode 100644 index 0000000000..12ffc20652 --- /dev/null +++ b/web/apps/uier/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint" + ] +} diff --git a/web/apps/uier/.vscode/launch.json b/web/apps/uier/.vscode/launch.json new file mode 100644 index 0000000000..7caa448e9f --- /dev/null +++ b/web/apps/uier/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Next.js: debug server-side", + "type": "node-terminal", + "request": "launch", + "command": "npm run dev" + }, + { + "name": "Next.js: debug client-side", + "type": "msedge", + "request": "launch", + "userDataDir": false, + "url": "http://localhost:4004", + "smartStep": true + }, + { + "name": "Next.js: debug full stack", + "type": "node-terminal", + "request": "launch", + "command": "npm run dev", + "serverReadyAction": { + "pattern": "started server on .+, url: (https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" + } + } + ] +} \ No newline at end of file diff --git a/web/apps/uier/@types/reset.d.ts b/web/apps/uier/@types/reset.d.ts new file mode 100644 index 0000000000..faedef42c7 --- /dev/null +++ b/web/apps/uier/@types/reset.d.ts @@ -0,0 +1,2 @@ +// Do not add any other lines of code to this file! +import '@total-typescript/ts-reset'; diff --git a/web/apps/uier/app/(rest)/(app)/layout.tsx b/web/apps/uier/app/(rest)/(app)/layout.tsx new file mode 100644 index 0000000000..ffeae3404b --- /dev/null +++ b/web/apps/uier/app/(rest)/(app)/layout.tsx @@ -0,0 +1,11 @@ +import { PropsWithChildren } from 'react'; + +export default function RootLayout({ children }: PropsWithChildren) { + return ( + <> +
+ {children} +
+ + ); +} diff --git a/web/apps/uier/app/(rest)/(marketing)/layout.tsx b/web/apps/uier/app/(rest)/(marketing)/layout.tsx new file mode 100644 index 0000000000..73d7bce9fc --- /dev/null +++ b/web/apps/uier/app/(rest)/(marketing)/layout.tsx @@ -0,0 +1,15 @@ +import { Container } from '@signalco/ui-primitives/Container'; +import { PageNav } from '../../../components/PageNav'; + +export default function RootMarketingLayout({ children, }: { + children: React.ReactNode; +}) { + return ( + <> + + + {children} + + + ); +} diff --git a/web/apps/uier/app/(rest)/(marketing)/page.tsx b/web/apps/uier/app/(rest)/(marketing)/page.tsx new file mode 100644 index 0000000000..e36f48a462 --- /dev/null +++ b/web/apps/uier/app/(rest)/(marketing)/page.tsx @@ -0,0 +1,33 @@ +import { KnownPages } from '../../../src/knownPages'; + +function Cover({ header }: { header?: string }) { + return ( +
{header}
+ ) +} + +export default function LandingPage() { + const data = [ + { + header: 'uier', + ctas: [ + { label: 'Get Started', href: KnownPages.App }, + ] + } + ]; + + const sections = [ + Cover + ]; + + return ( +
+ {sections.map((Section, index) => { + const sectionData = data[index]; + return ( +
+ ); + })} +
+ ); +} diff --git a/web/apps/uier/app/(rest)/error.tsx b/web/apps/uier/app/(rest)/error.tsx new file mode 100644 index 0000000000..9e2be2c04f --- /dev/null +++ b/web/apps/uier/app/(rest)/error.tsx @@ -0,0 +1,35 @@ +'use client'; + +import { useEffect } from 'react'; +import { Typography } from '@signalco/ui-primitives/Typography'; +import { Stack } from '@signalco/ui-primitives/Stack'; +import { Row } from '@signalco/ui-primitives/Row'; +import { Button } from '@signalco/ui-primitives/Button'; +import { NavigatingButton } from '@signalco/ui/NavigatingButton'; + +type RootErrorProps = { + error: Error; + reset: () => void; +}; + +export default function RootError({ error, reset }: RootErrorProps) { + useEffect(() => { + // Log the error to an error reporting service + console.error(error); + }, [error]); + + return ( + + + + Page not found + {'Can\'t find find what you\'re looking for...'} + + + doprocess home + + + + + ) +} diff --git a/web/apps/uier/app/(rest)/layout.tsx b/web/apps/uier/app/(rest)/layout.tsx new file mode 100644 index 0000000000..99447629d4 --- /dev/null +++ b/web/apps/uier/app/(rest)/layout.tsx @@ -0,0 +1,9 @@ +export default function RootLayout({ children, }: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/web/apps/uier/app/global.css b/web/apps/uier/app/global.css new file mode 100644 index 0000000000..09fc73ce55 --- /dev/null +++ b/web/apps/uier/app/global.css @@ -0,0 +1,10 @@ +@import '@signalco/ui/index.css'; + +html, body, #__next { + height: 100%; + width: 100%; +} + +:target { + scroll-margin-top: 64px; +} diff --git a/web/apps/uier/app/layout.tsx b/web/apps/uier/app/layout.tsx new file mode 100644 index 0000000000..ffdec84153 --- /dev/null +++ b/web/apps/uier/app/layout.tsx @@ -0,0 +1,51 @@ +import Script from 'next/script'; +import { Inter } from 'next/font/google'; +import { Metadata, Viewport } from 'next'; +import './global.css'; +import { Analytics } from '@vercel/analytics/react'; +import { ClientProvider } from '../components/providers/ClientProvider'; +import { AuthProvider } from '../components/providers/AuthProvider'; + +const inter = Inter({ + subsets: ['latin'], + variable: '--font-sans', +}); + +export default function RootLayout({ children, }: { + children: React.ReactNode; +}) { + return ( + + + + + {children} + +