diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 935780986f..18c9227156 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,20 +1,21 @@ -name: End to End Tests +name: Deploy Copilot Cloud Environment on: - workflow_dispatch: + workflow_call: inputs: - sha: - description: "sha" - required: true ref: - description: "ref" + type: string required: true + sha: + type: string + required: false urls: - description: "urls" - required: true + type: string + required: false pr_number: - description: "Pull Request number" + type: number required: true + jobs: e2e_tests: name: E2E Tests @@ -26,19 +27,6 @@ jobs: pull-requests: write statuses: write steps: - - name: Create Status Check - uses: actions/github-script@v6 - with: - script: | - await github.rest.checks.create({ - owner: context.repo.owner, - repo: context.repo.repo, - name: 'E2E Tests', - head_sha: '${{ inputs.sha }}', - status: 'in_progress', - started_at: new Date().toISOString() - }) - - name: Checkout uses: actions/checkout@v4 with: @@ -47,7 +35,7 @@ jobs: - name: Save E2E URLs working-directory: examples/e2e run: | - echo "${{ inputs.urls }}" | base64 -d > app-configs.json + echo "${{ inputs.urls }}" | base64 -d > test-config.json - name: Setup pnpm uses: pnpm/action-setup@v2 @@ -68,7 +56,7 @@ jobs: - name: Print app configs working-directory: examples/e2e run: | - cat app-configs.json + cat test-config.json - name: Delete a comment uses: thollander/actions-comment-pull-request@v3 @@ -77,12 +65,20 @@ jobs: comment-tag: test-run-status-update mode: delete + - name: Comment before running tests + uses: thollander/actions-comment-pull-request@v3 + with: + pr-number: ${{ inputs.pr_number }} + comment-tag: test-run-status-update + message: | + Running tests for commit ${{ inputs.sha }}... + - name: Run Tests id: run_tests working-directory: ./examples/e2e - continue-on-error: true run: | pnpm playwright test + echo "::set-output name=exit_code::$?" env: GITHUB_SHA: ${{ github.sha }} COPILOT_CLOUD_PROD_RUNTIME_URL: "https://api.cloud.copilotkit.ai/copilotkit/v1" @@ -91,151 +87,9 @@ jobs: COPILOT_CLOUD_STAGING_PUBLIC_API_KEY: ${{ secrets.COPILOT_CLOUD_STAGING_PUBLIC_API_KEY }} - name: Comment post-deployment + if: always() uses: thollander/actions-comment-pull-request@v3 with: pr-number: ${{ inputs.pr_number }} comment-tag: test-run-status-update file-path: ./examples/e2e/test-results/test-run-comment.md - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: | - examples/e2e/playwright-report/ - examples/e2e/test-results/ - retention-days: 30 - - - name: Update Status Check - if: always() - uses: actions/github-script@v6 - with: - script: | - const fs = require('fs'); - let summary = 'Test run completed.'; - let failedTests = 0; - try { - const resultsPath = './examples/e2e/test-results/test-results.json'; - if (!fs.existsSync(resultsPath)) { - throw new Error('Test results file not found'); - } - - const results = JSON.parse(fs.readFileSync(resultsPath, 'utf8')); - - const stats = results.stats; - failedTests = stats.unexpected; - - // Find failed test details - const failedSpecs = results.suites - .flatMap(s => s.suites || []) - .flatMap(s => s.suites || []) - .flatMap(s => s.specs || []) - .filter(spec => !spec.ok); - - const failureDetails = failedSpecs.map(spec => { - const test = spec.tests[0]; - const error = test.results[0].error; - // Extract relative path from the full file path - const testFile = spec.file ? spec.file.replace(/^.*?examples\/e2e\//, '') : 'unknown-file.ts'; - const line = error.location?.line || 1; - return { - title: spec.title, - error: error.message.split('\n')[0], - file: testFile, - line: line - }; - }); - - if (failedTests > 0) { - summary = [ - `🚨 **${failedTests} of ${stats.expected + stats.unexpected} tests failed**`, - '', - 'Failed Tests:', - ...failureDetails.map(f => - `- 🔴 [\`${f.title}\`](${f.file}:${f.line})\n \`\`\`diff\n- ${f.error}\n\`\`\`` - ), - '', - `Duration: ${Math.round(stats.duration / 1000)}s`, - '', - '[View detailed test report](../actions/runs/${{ github.run_id }})' - ].join('\n'); - - // Create individual annotations for each failure - const annotations = failureDetails.map(failure => ({ - path: `examples/e2e/${failure.file}`, - start_line: failure.line, - end_line: failure.line, - annotation_level: 'failure', - title: 'Test Failure', - message: failure.title, - raw_details: failure.error - })); - - // Add summary annotation - annotations.push({ - path: 'examples/e2e/playwright.config.ts', - start_line: 1, - end_line: 1, - annotation_level: 'failure', - title: 'Test Suite Summary', - message: `${failedTests} test(s) failed. See detailed report for more information.`, - raw_details: `Failed ${failedTests} of ${stats.expected + stats.unexpected} tests` - }); - - // Create the check with all annotations - await github.rest.checks.create({ - owner: context.repo.owner, - repo: context.repo.repo, - name: 'E2E Tests', - head_sha: '${{ inputs.sha }}', - status: 'completed', - conclusion: 'failure', - completed_at: new Date().toISOString(), - output: { - title: '❌ E2E Tests Failed', - summary: summary, - annotations: annotations - } - }); - } else { - // Success case - await github.rest.checks.create({ - owner: context.repo.owner, - repo: context.repo.repo, - name: 'E2E Tests', - head_sha: '${{ inputs.sha }}', - status: 'completed', - conclusion: 'success', - completed_at: new Date().toISOString(), - output: { - title: '✅ E2E Tests Passed', - summary: `✅ All ${stats.expected} tests passed in ${Math.round(stats.duration / 1000)}s` - } - }); - } - } catch (error) { - // Error case - console.error('Error processing test results:', error); - await github.rest.checks.create({ - owner: context.repo.owner, - repo: context.repo.repo, - name: 'E2E Tests', - head_sha: '${{ inputs.sha }}', - status: 'completed', - conclusion: 'failure', - completed_at: new Date().toISOString(), - output: { - title: '⚠️ Error Processing Test Results', - summary: `Failed to process test results: ${error.message}`, - annotations: [{ - path: 'examples/e2e/playwright.config.ts', - start_line: 1, - end_line: 1, - annotation_level: 'failure', - title: 'Error Processing Results', - message: 'Failed to process test results', - raw_details: error.stack - }] - } - }); - } diff --git a/.github/workflows/preview-envs-deploy.yml b/.github/workflows/preview-envs-deploy.yml index 0807a29d64..c8882840f3 100644 --- a/.github/workflows/preview-envs-deploy.yml +++ b/.github/workflows/preview-envs-deploy.yml @@ -1,4 +1,4 @@ -name: Preview Environments +name: Deploy Preview Environments on: pull_request: @@ -10,7 +10,7 @@ on: - main concurrency: - group: preview-${{ github.event.pull_request.number }}-deploy + group: preview-${{ github.ref }}-deploy cancel-in-progress: false jobs: @@ -24,14 +24,24 @@ jobs: - { project: "coagents-research-canvas", type: "agent", + runtime: "python", deps: "local-deps", } + - { + project: "coagents-research-canvas", + type: "agent", + runtime: "js", + deps: "remote-deps", + } - { project: "coagents-research-canvas", type: "ui" } - - { project: "coagents-routing", type: "agent", deps: "local-deps" } + - { project: "coagents-routing", type: "agent", runtime: "python", deps: "local-deps" } + - { project: "coagents-routing", type: "agent", runtime: "js", deps: "remote-deps" } - { project: "coagents-routing", type: "ui" } - - { project: "coagents-qa-text", type: "agent", deps: "local-deps" } + - { project: "coagents-qa-text", type: "agent", runtime: "python", deps: "local-deps" } + - { project: "coagents-qa-text", type: "agent", runtime: "js", deps: "remote-deps" } - { project: "coagents-qa-text", type: "ui" } - - { project: "coagents-qa-native", type: "agent", deps: "local-deps" } + - { project: "coagents-qa-native", type: "agent", runtime: "python", deps: "local-deps" } + - { project: "coagents-qa-native", type: "agent", runtime: "js", deps: "remote-deps" } - { project: "coagents-qa-native", type: "ui" } - { project: "next-openai", type: "next-openai" } steps: @@ -136,13 +146,13 @@ jobs: env: DOCKER_BUILDKIT: 1 - - name: (Agent) Build Image - if: matrix.app.type == 'agent' + - name: (Agent) Build Image - Python Agent + if: matrix.app.type == 'agent' && matrix.app.runtime == 'python' run: | docker buildx build \ - -t 058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:${{ matrix.app.project }}-agent-${{ matrix.app.deps }}-${{ github.run_id }} \ - --build-arg APP_DIR=examples/${{ matrix.app.project }}/${{ matrix.app.type }} \ - -f ./examples/Dockerfile.${{ matrix.app.type }} \ + -t 058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:${{ matrix.app.project }}-agent-python-${{ matrix.app.deps }}-${{ github.run_id }} \ + --build-arg APP_DIR=examples/${{ matrix.app.project }}/agent \ + -f ./examples/Dockerfile.agent-python \ --build-arg WITH_LOCAL_DEPS=${{ matrix.app.deps == 'local-deps' }} \ --platform=linux/amd64 \ --provenance=false \ @@ -151,10 +161,29 @@ jobs: env: DOCKER_BUILDKIT: 1 - cdk_deploy: - runs-on: ubuntu-latest + - name: (Agent) Build Image - JS Agent + if: matrix.app.type == 'agent' && matrix.app.runtime == 'js' + run: | + docker buildx build \ + -t 058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:${{ matrix.app.project }}-agent-js-${{ matrix.app.deps }}-${{ github.run_id }} \ + --build-arg APP_DIR=examples/${{ matrix.app.project }}/agent-js \ + -f ./examples/Dockerfile.agent-js \ + --platform=linux/amd64 \ + --provenance=false \ + --push \ + . + env: + DOCKER_BUILDKIT: 1 + + deploy: name: Deploy Preview Environments + runs-on: ubuntu-20.04 needs: build_images + outputs: + e2e-urls: ${{ steps.export-e2e-urls.outputs.e2e-urls }} + defaults: + run: + working-directory: examples/helmfile steps: - name: Checkout uses: actions/checkout@v3 @@ -204,61 +233,19 @@ jobs: with: node-version: 21.x cache: "pnpm" - cache-dependency-path: "**/pnpm-lock.yaml" + cache-dependency-path: "./examples/helmfile/pnpm-lock.yaml" - - name: Infra install dependencies - working-directory: infra - run: pnpm i - - - name: Install AWS CDK - run: npm install -g aws-cdk - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - - name: Configure AWS Profile - run: | - aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} --profile default - aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} --profile default - aws configure set region us-east-1 - - - name: cdk deploy - working-directory: ./infra - run: cdk deploy --profile default --all --require-approval never --outputs-file=cdk_outputs.json --concurrency 10 - env: - UNIQUE_ENV_ID: "PR${{ github.event.number }}" - GITHUB_ACTIONS_RUN_ID: "${{ github.run_id }}" - GITHUB_PR_NUMBER: "${{ github.event.number }}" - - - name: Print CDK Outputs - working-directory: infra - run: | - cat cdk_outputs.json + - name: Install dependencies + run: pnpm install --frozen-lockfile - name: Generate table from outputs id: generate-table - working-directory: infra run: | node generate-table env: + ENVIRONMENT: ${{ steps.set-environment-name.outputs.environment }} GITHUB_SHA: ${{ github.sha }} - - name: Assign label - uses: actions/github-script@v4 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - github.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['preview'] - }) - - name: Delete a comment uses: thollander/actions-comment-pull-request@v3 with: @@ -269,13 +256,13 @@ jobs: uses: thollander/actions-comment-pull-request@v3 with: comment-tag: preview-status-update - file-path: ./infra/preview-comment.md + file-path: ./examples/helmfile/preview-comment.md - name: Export Variable - E2E URLs id: export-e2e-urls - working-directory: infra + working-directory: examples/e2e run: | - echo "e2e-urls=$(node get-e2e-tests-urls.js | base64 -w 0)" >> "$GITHUB_OUTPUT" + echo "e2e-urls=$(cat test-config.json | base64 -w 0)" >> "$GITHUB_OUTPUT" test: if: github.event_name == 'pull_request' diff --git a/.github/workflows/preview-envs-destroy.yml b/.github/workflows/preview-envs-destroy.yml index 64acf4c2ed..0b2f4d71a2 100644 --- a/.github/workflows/preview-envs-destroy.yml +++ b/.github/workflows/preview-envs-destroy.yml @@ -5,9 +5,9 @@ on: types: [ closed ] workflow_dispatch: inputs: - pr_number: - description: 'Pull Request Number' - required: true + environment: + description: 'Environment Name (e.g. `pr-1269`)' + required: false concurrency: group: preview-${{ github.event.pull_request.number }}-destroy @@ -15,9 +15,12 @@ concurrency: jobs: preview_envs_destroy: - if: github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'preview') || github.event_name == 'workflow_dispatch' + if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest name: Destroy Preview Environments + defaults: + run: + working-directory: examples/helmfile permissions: deployments: write pull-requests: write @@ -27,44 +30,42 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Install AWS CDK - run: npm install -g aws-cdk - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v2 with: + aws-region: us-east-1 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Configure AWS Profile + - name: Setup helmfile + uses: mamezou-tech/setup-helmfile@v1.2.0 + + - name: EKS Config run: | - aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} --profile default - aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} --profile default - aws configure set region us-east-1 - - - uses: pnpm/action-setup@v4 - with: - version: 9 + aws eks --region us-east-1 update-kubeconfig --name copilotcloud-staging-eks - - name: Infra install dependencies - working-directory: infra - run: pnpm i - - - name: Set variable UNIQUE_ENV_ID - id: set_unique_env_id + - name: Set Environment Name + id: set-environment-name run: | - echo "UNIQUE_ENV_ID=${{ github.event.number && format('PR{0}', github.event.number) || format('PR{0}', inputs.pr_number) }}" >> "$GITHUB_OUTPUT" + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "ENVIRONMENT=${{ github.event.inputs.environment }}" >> "$GITHUB_OUTPUT" + elif [ "${{ github.event_name }}" = "pull_request" ]; then + echo "ENVIRONMENT=pr-${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT" + fi - - name: cdk destroy - working-directory: ./infra - run: cdk destroy --profile default --all --force - env: - UNIQUE_ENV_ID: ${{ steps.set_unique_env_id.outputs.UNIQUE_ENV_ID }} - GITHUB_ACTIONS_RUN_ID: "${{ github.run_id }}" - GITHUB_PR_NUMBER: "${{ github.event.number }}" + - name: Prepare Environment Config + run: | + cat > ./override-values.yaml << 'EOL' + environment: ${{ steps.set-environment-name.outputs.environment }} + EOL + + - name: Helmfile Destroy + run: | + helmfile --state-values-file=./override-values.yaml destroy + kubectl delete namespace ${{ steps.set-environment-name.outputs.environment }} -A --force - name: Comment post-destroy + if: github.event_name == 'pull_request' uses: thollander/actions-comment-pull-request@v3 with: comment-tag: preview-status-update diff --git a/CopilotKit/examples/next-openai/Dockerfile b/CopilotKit/examples/next-openai/Dockerfile index c2248f8dfb..631904eda2 100644 --- a/CopilotKit/examples/next-openai/Dockerfile +++ b/CopilotKit/examples/next-openai/Dockerfile @@ -23,5 +23,6 @@ RUN pnpm i --frozen-lockfile # Set the environment variables (if needed) ENV NODE_ENV=production -EXPOSE 3000 -CMD ["node", "server.js"] \ No newline at end of file +ENV HOST=0.0.0.0 +ENV PORT=3000 +CMD ["node", "server.js", "--host", "$HOST", "--port", "$PORT"] \ No newline at end of file diff --git a/examples/Dockerfile.agent-js b/examples/Dockerfile.agent-js new file mode 100644 index 0000000000..cd289f0ae3 --- /dev/null +++ b/examples/Dockerfile.agent-js @@ -0,0 +1,28 @@ +# syntax=docker/dockerfile:1-labs + +FROM node:22-slim AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable + +RUN apt-get update && apt-get install curl -y + +# First install via pnpx +RUN pnpx @langchain/langgraph-cli --help + +ARG APP_DIR + +WORKDIR /app + +RUN touch .env + +# Copy only poetry files first +COPY ${APP_DIR}/package.json ${APP_DIR}/pnpm-lock.yaml ./ +RUN pnpm i --frozen-lockfile + +# Copy SDK and install dependencies in a single layer +COPY ${APP_DIR}/ ./ + +RUN ls -la + +CMD ["/bin/sh", "-c", "pnpx @langchain/langgraph-cli dev --config=langgraph.json --no-browser --port 8000 --host 0.0.0.0"] \ No newline at end of file diff --git a/examples/Dockerfile.agent b/examples/Dockerfile.agent-python similarity index 90% rename from examples/Dockerfile.agent rename to examples/Dockerfile.agent-python index 7ce3334190..0207586ced 100644 --- a/examples/Dockerfile.agent +++ b/examples/Dockerfile.agent-python @@ -5,6 +5,8 @@ ARG WITH_LOCAL_DEPS ENV POETRY_VIRTUALENVS_CREATE=false +RUN apt-get update && apt-get install curl -y + # Install poetry and configure it in a single layer RUN pip install poetry==1.7.1 && \ poetry config virtualenvs.create false diff --git a/examples/Dockerfile.ui b/examples/Dockerfile.ui index f832d2e5d4..f66ff560ff 100644 --- a/examples/Dockerfile.ui +++ b/examples/Dockerfile.ui @@ -21,7 +21,8 @@ COPY ${APP_DIR}/.next/static ./.next/static # Set the environment variables (if needed) ENV NODE_ENV=production -EXPOSE 3000 -CMD ["node", "server.js"] +ENV HOST=0.0.0.0 +ENV PORT=3000 +CMD ["node", "server.js", "--host", "$HOST", "--port", "$PORT"] # \ No newline at end of file diff --git a/examples/coagents-qa-native/agent-js/.gitignore b/examples/coagents-qa-native/agent-js/.gitignore index f351710520..d44ec5787e 100644 --- a/examples/coagents-qa-native/agent-js/.gitignore +++ b/examples/coagents-qa-native/agent-js/.gitignore @@ -3,3 +3,6 @@ __pycache__/ *.pyc .env .vercel + +# LangGraph API +.langgraph_api diff --git a/examples/coagents-qa-native/agent/email_agent/demo.py b/examples/coagents-qa-native/agent/email_agent/demo.py index 457737dd63..b77ab9b7c2 100644 --- a/examples/coagents-qa-native/agent/email_agent/demo.py +++ b/examples/coagents-qa-native/agent/email_agent/demo.py @@ -23,6 +23,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-qa-text/agent-js/.gitignore b/examples/coagents-qa-text/agent-js/.gitignore index f351710520..d44ec5787e 100644 --- a/examples/coagents-qa-text/agent-js/.gitignore +++ b/examples/coagents-qa-text/agent-js/.gitignore @@ -3,3 +3,6 @@ __pycache__/ *.pyc .env .vercel + +# LangGraph API +.langgraph_api diff --git a/examples/coagents-qa-text/agent-js/package.json b/examples/coagents-qa-text/agent-js/package.json index 716b281ee1..5ea3c8ff97 100644 --- a/examples/coagents-qa-text/agent-js/package.json +++ b/examples/coagents-qa-text/agent-js/package.json @@ -10,6 +10,7 @@ "author": "", "license": "ISC", "devDependencies": { + "@types/html-to-text": "^9.0.4", "@types/node": "^22.9.0", "typescript": "^5.6.3" diff --git a/examples/coagents-qa-text/agent/greeting_agent/demo.py b/examples/coagents-qa-text/agent/greeting_agent/demo.py index 8eb95d9e25..979e529aef 100644 --- a/examples/coagents-qa-text/agent/greeting_agent/demo.py +++ b/examples/coagents-qa-text/agent/greeting_agent/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-qa/agent/email_agent/demo.py b/examples/coagents-qa/agent/email_agent/demo.py index 3767197967..6588ebf9d1 100644 --- a/examples/coagents-qa/agent/email_agent/demo.py +++ b/examples/coagents-qa/agent/email_agent/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-research-canvas/agent-js/.gitignore b/examples/coagents-research-canvas/agent-js/.gitignore index f351710520..d44ec5787e 100644 --- a/examples/coagents-research-canvas/agent-js/.gitignore +++ b/examples/coagents-research-canvas/agent-js/.gitignore @@ -3,3 +3,6 @@ __pycache__/ *.pyc .env .vercel + +# LangGraph API +.langgraph_api diff --git a/examples/coagents-research-canvas/agent/research_canvas/demo.py b/examples/coagents-research-canvas/agent/research_canvas/demo.py index 6d1c4347c7..20e6782c98 100644 --- a/examples/coagents-research-canvas/agent/research_canvas/demo.py +++ b/examples/coagents-research-canvas/agent/research_canvas/demo.py @@ -35,7 +35,6 @@ def health(): """Health check.""" return {"status": "ok"} - def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-routing/agent-js/.gitignore b/examples/coagents-routing/agent-js/.gitignore index f351710520..d44ec5787e 100644 --- a/examples/coagents-routing/agent-js/.gitignore +++ b/examples/coagents-routing/agent-js/.gitignore @@ -3,3 +3,6 @@ __pycache__/ *.pyc .env .vercel + +# LangGraph API +.langgraph_api diff --git a/examples/coagents-routing/agent/my_agent/demo.py b/examples/coagents-routing/agent/my_agent/demo.py index 34d2246daa..7d768a8eb4 100644 --- a/examples/coagents-routing/agent/my_agent/demo.py +++ b/examples/coagents-routing/agent/my_agent/demo.py @@ -62,7 +62,6 @@ def health(): """Health check.""" return {"status": "ok"} - def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-shared-state/agent/translate_agent/demo.py b/examples/coagents-shared-state/agent/translate_agent/demo.py index 604aaef1ea..1ad144cafa 100644 --- a/examples/coagents-shared-state/agent/translate_agent/demo.py +++ b/examples/coagents-shared-state/agent/translate_agent/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-starter/agent/greeter/demo.py b/examples/coagents-starter/agent/greeter/demo.py index 3da81585e6..88fed8a4c8 100644 --- a/examples/coagents-starter/agent/greeter/demo.py +++ b/examples/coagents-starter/agent/greeter/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-travel/agent/travel/demo.py b/examples/coagents-travel/agent/travel/demo.py index 487b819e0b..22e440ec05 100644 --- a/examples/coagents-travel/agent/travel/demo.py +++ b/examples/coagents-travel/agent/travel/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/coagents-wait-user-input/agent/weather_agent/demo.py b/examples/coagents-wait-user-input/agent/weather_agent/demo.py index c90fbd44c7..ad4b26e2ea 100644 --- a/examples/coagents-wait-user-input/agent/weather_agent/demo.py +++ b/examples/coagents-wait-user-input/agent/weather_agent/demo.py @@ -24,6 +24,12 @@ sdk = CopilotKitRemoteEndpoint( add_fastapi_endpoint(app, sdk, "/copilotkit") +# add new route for health check +@app.get("/health") +def health(): + """Health check.""" + return {"status": "ok"} + def main(): """Run the uvicorn server.""" port = int(os.getenv("PORT", "8000")) diff --git a/examples/e2e/.gitignore b/examples/e2e/.gitignore index 8c9cb319b3..92627d1dbf 100644 --- a/examples/e2e/.gitignore +++ b/examples/e2e/.gitignore @@ -4,4 +4,5 @@ node_modules/ /blob-report/ /playwright/.cache/ app-configs.json +test-config.json .env \ No newline at end of file diff --git a/examples/e2e/lib/config-helper.ts b/examples/e2e/lib/config-helper.ts index 7c375cd63b..255ae3b76d 100644 --- a/examples/e2e/lib/config-helper.ts +++ b/examples/e2e/lib/config-helper.ts @@ -1,5 +1,5 @@ // lib/config-helper.ts -import configs from "../app-configs.json"; +import configs from "../test-config.json"; // Project name constants with type safety export const PROJECT_NAMES = { @@ -84,7 +84,7 @@ export const appendLGCVariants = (config: ConfigItem, variants: any[]) => { const newVariants = variants.map((variant) => { return { ...variant, - name: `${variant.name} (LGC Python)`, + name: `${variant.name} (LGC Python in-memory)`, queryParams: `${variant.queryParams}&lgcDeploymentUrl=${config.lgcPythonDeploymentUrl}`, }; }); @@ -96,7 +96,7 @@ export const appendLGCVariants = (config: ConfigItem, variants: any[]) => { const newVariants = variants.map((variant) => { return { ...variant, - name: `${variant.name} (LGC JS \`main\`)`, + name: `${variant.name} (LGC JS in-memory)`, queryParams: `${variant.queryParams}&lgcDeploymentUrl=${config.lgcJSDeploymentUrl}`, }; }); diff --git a/examples/e2e/tests/coagents-canvas-researcher-demo.spec.ts b/examples/e2e/tests/coagents-canvas-researcher-demo.spec.ts index 59fd435b12..739b7c1bd2 100644 --- a/examples/e2e/tests/coagents-canvas-researcher-demo.spec.ts +++ b/examples/e2e/tests/coagents-canvas-researcher-demo.spec.ts @@ -36,7 +36,6 @@ Object.entries(groupedConfigs).forEach(([projectName, descriptions]) => { appendLGCVariants( { ...config, - lgcJSDeploymentUrl: config.lgcJSDeploymentUrl, }, variants ).forEach((variant) => { diff --git a/examples/e2e/tests/coagents-qa-native-demo.spec.ts b/examples/e2e/tests/coagents-qa-native-demo.spec.ts index 1dca28a831..62e1e18c8e 100644 --- a/examples/e2e/tests/coagents-qa-native-demo.spec.ts +++ b/examples/e2e/tests/coagents-qa-native-demo.spec.ts @@ -30,7 +30,6 @@ Object.entries(groupedConfigs).forEach(([projectName, descriptions]) => { appendLGCVariants( { ...config, - lgcJSDeploymentUrl: config.lgcJSDeploymentUrl, }, variants ).forEach((variant) => { diff --git a/examples/e2e/tests/coagents-qa-text-demo.spec.ts b/examples/e2e/tests/coagents-qa-text-demo.spec.ts index 3890f69b23..f114b3a20f 100644 --- a/examples/e2e/tests/coagents-qa-text-demo.spec.ts +++ b/examples/e2e/tests/coagents-qa-text-demo.spec.ts @@ -29,7 +29,6 @@ Object.entries(groupedConfigs).forEach(([projectName, descriptions]) => { appendLGCVariants( { ...config, - lgcJSDeploymentUrl: config.lgcJSDeploymentUrl, }, variants ).forEach((variant) => { diff --git a/examples/e2e/tests/coagents-routing-demo.spec.ts b/examples/e2e/tests/coagents-routing-demo.spec.ts index d930a3cd3a..03c0f04eb4 100644 --- a/examples/e2e/tests/coagents-routing-demo.spec.ts +++ b/examples/e2e/tests/coagents-routing-demo.spec.ts @@ -12,7 +12,6 @@ import { const variants: TestVariants = [ { name: "OpenAI", queryParams: "?coAgentsModel=openai" }, { name: "Anthropic", queryParams: "?coAgentsModel=anthropic" }, - // { name: "Google Generative AI", queryParams: "?coAgentsModel=google_genai" }, // seems broken ]; // Get configurations @@ -31,7 +30,6 @@ Object.entries(groupedConfigs).forEach(([projectName, descriptions]) => { appendLGCVariants( { ...config, - lgcJSDeploymentUrl: config.lgcJSDeploymentUrl, }, variants ).forEach((variant) => { diff --git a/examples/helmfile/.gitignore b/examples/helmfile/.gitignore new file mode 100644 index 0000000000..403be75fcd --- /dev/null +++ b/examples/helmfile/.gitignore @@ -0,0 +1 @@ +preview-comment.md \ No newline at end of file diff --git a/examples/helmfile/charts/example-app/.helmignore b/examples/helmfile/charts/example-app/.helmignore new file mode 100644 index 0000000000..0e8a0eb36f --- /dev/null +++ b/examples/helmfile/charts/example-app/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/examples/helmfile/charts/example-app/Chart.yaml b/examples/helmfile/charts/example-app/Chart.yaml new file mode 100644 index 0000000000..ca631c136f --- /dev/null +++ b/examples/helmfile/charts/example-app/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: example-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/examples/helmfile/charts/example-app/templates/NOTES.txt b/examples/helmfile/charts/example-app/templates/NOTES.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/helmfile/charts/example-app/templates/_helpers.tpl b/examples/helmfile/charts/example-app/templates/_helpers.tpl new file mode 100644 index 0000000000..8340d06f75 --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/_helpers.tpl @@ -0,0 +1,52 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "example-app.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "example-app.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "example-app.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Validate that environment is set +*/}} +{{- define "example-app.environment" -}} +{{- if not .Values.environment }} +{{- fail "environment must be set in values" }} +{{- end }} +{{- printf "%s" .Values.environment }} +{{- end }} + +{{/* +Convert JSON string to Kubernetes environment variables +*/}} +{{- define "example-app.jsonToEnv" -}} +{{- $json := . -}} +{{- range $key, $value := $json }} +- name: {{ $key }} + value: {{ $value | quote }} +{{- end }} +{{- end -}} diff --git a/examples/helmfile/charts/example-app/templates/deployment.yaml b/examples/helmfile/charts/example-app/templates/deployment.yaml new file mode 100644 index 0000000000..980a3447f1 --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/deployment.yaml @@ -0,0 +1,52 @@ +{{- $root := . }} +{{- range $deploymentIndex, $deployment := .Values.deployments }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $deployment.name }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: {{ $deployment.name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ $deployment.name }} + spec: + strategy: + type: Recreate + securityContext: {} + containers: + - name: {{ $deployment.name }} + image: "{{ $deployment.image.repository }}-{{ $deployment.image.tag }}" + imagePullPolicy: {{ $deployment.image.pullPolicy | default "IfNotPresent" }} + {{- if $deployment.command }} + command: + {{- toYaml $deployment.command | nindent 12 }} + {{- end }} + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "750m" + memory: "512Mi" + env: + {{- if $deployment.config.secretsJson }} + {{- include "example-app.jsonToEnv" $deployment.config.secretsJson | nindent 12 }} + {{- end }} + {{- if $deployment.config.env }} + {{- toYaml $deployment.config.env | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ $deployment.port }} + protocol: TCP + {{- with $deployment.livenessProbe }} + livenessProbe: + {{ toYaml . | nindent 12 }} + readinessProbe: + {{ toYaml . | nindent 12 }} + {{- end }} +{{- end }} diff --git a/examples/helmfile/charts/example-app/templates/ingress.yaml b/examples/helmfile/charts/example-app/templates/ingress.yaml new file mode 100644 index 0000000000..a9f09f69e2 --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/ingress.yaml @@ -0,0 +1,40 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: "{{ .Release.Name }}-ingress" + annotations: + alb.ingress.kubernetes.io/group.name: "{{ include "example-app.environment" . }}-shared-demos" + alb.ingress.kubernetes.io/group.order: "1" + alb.ingress.kubernetes.io/target-type: "ip" + alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' + alb.ingress.kubernetes.io/ssl-redirect: '443' +spec: + ingressClassName: alb + rules: + {{- $root := . }} + {{- range $deploymentIndex, $deployment := .Values.deployments }} + - host: "{{ $deployment.name }}-{{ include "example-app.environment" $root }}.demos.devcopilotkit.com" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: "{{ $deployment.name }}" + port: + number: {{ $deployment.port }} + - path: / + pathType: ImplementationSpecific + backend: + service: + name: ssl-redirect + port: + name: use-annotation + {{- end }} + + tls: + - hosts: + {{- $root := . }} + {{- range $deploymentIndex, $deployment := .Values.deployments }} + - "{{ $deployment.name }}-{{ include "example-app.environment" $root }}.demos.devcopilotkit.com" + {{- end }} diff --git a/examples/helmfile/charts/example-app/templates/outputs-configmap.yaml b/examples/helmfile/charts/example-app/templates/outputs-configmap.yaml new file mode 100644 index 0000000000..74590f412d --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/outputs-configmap.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.app.name }}-outputs +data: + app.name: {{ .Values.app.name }} + deployments: | + [ + {{- $root := . }} + {{- range $deploymentIndex, $deployment := .Values.deployments }} + { + "deployment": "{{ $deployment.name }}", + "url": "https://{{ $deployment.name }}-{{ $root.Values.environment}}.demos.devcopilotkit.com", + {{- if $deployment.outputs }} + "outputs": {{ $deployment.outputs | toJson }} + {{- else }} + "outputs": {} + {{- end }} + }{{- if ne $deploymentIndex (sub (len $root.Values.deployments) 1) }}, {{- end }} + {{- end }} + ] \ No newline at end of file diff --git a/examples/helmfile/charts/example-app/templates/service.yaml b/examples/helmfile/charts/example-app/templates/service.yaml new file mode 100644 index 0000000000..b0cb4ed0a3 --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/service.yaml @@ -0,0 +1,17 @@ +{{- $root := . }} +{{- range $deploymentIndex, $deployment := .Values.deployments }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $deployment.name }} +spec: + type: ClusterIP + ports: + - port: {{ $deployment.port }} + targetPort: {{ $deployment.port }} + protocol: TCP + name: http + selector: + app.kubernetes.io/name: {{ $deployment.name }} +{{- end }} diff --git a/examples/helmfile/charts/example-app/templates/serviceaccount.yaml b/examples/helmfile/charts/example-app/templates/serviceaccount.yaml new file mode 100644 index 0000000000..fe7a3e69e1 --- /dev/null +++ b/examples/helmfile/charts/example-app/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.serviceAccount (and .Values.serviceAccount.create true) -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "example-app.serviceAccountName" . }} + labels: + {{- include "example-app.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/examples/helmfile/charts/examples-shared/.helmignore b/examples/helmfile/charts/examples-shared/.helmignore new file mode 100644 index 0000000000..0e8a0eb36f --- /dev/null +++ b/examples/helmfile/charts/examples-shared/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/examples/helmfile/charts/examples-shared/Chart.yaml b/examples/helmfile/charts/examples-shared/Chart.yaml new file mode 100644 index 0000000000..9e6f3cee4e --- /dev/null +++ b/examples/helmfile/charts/examples-shared/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: examples-shared +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/examples/helmfile/charts/examples-shared/templates/_helpers.tpl b/examples/helmfile/charts/examples-shared/templates/_helpers.tpl new file mode 100644 index 0000000000..c7e8c6e0f9 --- /dev/null +++ b/examples/helmfile/charts/examples-shared/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "shared.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "shared.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "shared.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "shared.labels" -}} +helm.sh/chart: {{ include "shared.chart" . }} +{{ include "shared.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "shared.selectorLabels" -}} +app.kubernetes.io/name: {{ include "shared.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "shared.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "shared.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/examples/helmfile/charts/examples-shared/templates/ingress.yaml b/examples/helmfile/charts/examples-shared/templates/ingress.yaml new file mode 100644 index 0000000000..2a8bf5d0e6 --- /dev/null +++ b/examples/helmfile/charts/examples-shared/templates/ingress.yaml @@ -0,0 +1,38 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: "{{ .Release.Name }}-shared-ingress" + annotations: + external-dns.alpha.kubernetes.io/hostname: '*.{{ .Values.ingress.host }}' + alb.ingress.kubernetes.io/load-balancer-name: "{{ .Values.environment }}-examples-shared-alb" + alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' + alb.ingress.kubernetes.io/scheme: "internet-facing" + alb.ingress.kubernetes.io/target-type: "ip" + alb.ingress.kubernetes.io/ssl-redirect: '443' + service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" + service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" + service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "{{ .Values.ingress.acmCertificateArn }}" + alb.ingress.kubernetes.io/group.name: "{{ .Values.environment }}-shared-demos" +spec: + ingressClassName: alb + rules: + - host: "{{ .Values.environment }}-placeholder.demos.devcopilotkit.com" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: nginx-placeholder-service + port: + number: 80 + - path: / + pathType: ImplementationSpecific + backend: + service: + name: ssl-redirect + port: + name: use-annotation + tls: + - hosts: + - "{{ .Values.environment }}-placeholder.demos.devcopilotkit.com" \ No newline at end of file diff --git a/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-deployment.yaml b/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-deployment.yaml new file mode 100644 index 0000000000..0644588bda --- /dev/null +++ b/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-placeholder +spec: + replicas: 1 + selector: + matchLabels: + app: nginx-placeholder + template: + metadata: + labels: + app: nginx-placeholder + spec: + containers: + - name: nginx-placeholder + image: nginx:latest + ports: + - containerPort: 80 diff --git a/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-service.yaml b/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-service.yaml new file mode 100644 index 0000000000..bfd4c06699 --- /dev/null +++ b/examples/helmfile/charts/examples-shared/templates/nginx-placeholder-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx-placeholder-service +spec: + selector: + app: nginx-placeholder + ports: + - protocol: TCP + port: 80 # The port exposed by the service + targetPort: 80 # The port exposed by the nginx container + type: ClusterIP diff --git a/examples/helmfile/charts/examples-shared/templates/serviceaccount.yaml b/examples/helmfile/charts/examples-shared/templates/serviceaccount.yaml new file mode 100644 index 0000000000..caa13a5e95 --- /dev/null +++ b/examples/helmfile/charts/examples-shared/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "shared.serviceAccountName" . }} + labels: + {{- include "shared.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/examples/helmfile/charts/examples-shared/values.yaml.gotmpl b/examples/helmfile/charts/examples-shared/values.yaml.gotmpl new file mode 100644 index 0000000000..8ea59ad90b --- /dev/null +++ b/examples/helmfile/charts/examples-shared/values.yaml.gotmpl @@ -0,0 +1,13 @@ +environment: {{ .Values.environment }} + +ingress: + host: {{ .Values.ingressGroup.host }} + acmCertificateArn: {{ .Values.ingressGroup.acmCertificateArn }} + +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + create: true + annotations: {} + name: "" diff --git a/examples/helmfile/env-magic.gotmpl b/examples/helmfile/env-magic.gotmpl new file mode 100644 index 0000000000..fb79dd163e --- /dev/null +++ b/examples/helmfile/env-magic.gotmpl @@ -0,0 +1,6 @@ +{{/* +extract both globals and deployment.outputs.type === "ui"); + + if (ui) { + row.previews.push({ + label: "Preview", + url: ui.url + }); + + testConfigs[releaseName] = { + url: ui.url, + description: ui.outputs.description, + projectName: releaseName, + }; + } else { + throw new Error(`UI deployment not found for ${releaseName}`); + } + + const agentLgcPython = deployments.find((deployment) => deployment.outputs.type === "agent-lgc-python"); + + if (agentLgcPython) { + testConfigs[releaseName].lgcPythonDeploymentUrl = agentLgcPython.url; + + row.previews.push({ + label: "Preview (LangGraph Platform Python)", + url: `${ui.url}?lgcDeploymentUrl=${agentLgcPython.url}` + }); + } + + const agentLgcJs = deployments.find((deployment) => deployment.outputs.type === "agent-lgc-js"); + + if (agentLgcJs) { + testConfigs[releaseName].lgcJSDeploymentUrl = agentLgcJs.url; + + row.previews.push({ + label: "Preview (LangGraph Platform JS)", + url: `${ui.url}?lgcDeploymentUrl=${agentLgcJs.url}` + }); + } + + tableRows.push(row); +} + +function generateTable() { + const structure = []; + structure.push({ h1: "Previews" }); + + structure.push({ + p: `**Commit SHA:** ${process.env.GITHUB_SHA?.substring(0, 7)}`, + }); + + const rows = tableRows.map((release) => { + return { + Name: release.name, + Previews: release.previews.map((preview) => `[${preview.label}](${preview.url})`).join(" • "), + }; + }); + + structure.push({ + table: { + headers: ["Name", "Previews"], + rows, + }, + }); + + const md = json2md(structure); + console.log(md); + fs.writeFileSync(path.resolve(__dirname, "./preview-comment.md"), md); + + fs.writeFileSync(path.resolve(__dirname, "../e2e/test-config.json"), JSON.stringify(testConfigs, null, 2)); +} + +generateTable(); diff --git a/examples/helmfile/helmfile-output.json b/examples/helmfile/helmfile-output.json new file mode 100644 index 0000000000..b4c04895b6 --- /dev/null +++ b/examples/helmfile/helmfile-output.json @@ -0,0 +1,11 @@ +[ + { + "name": "coagents-research-canvas", + "namespace": "pr-test-321", + "enabled": true, + "installed": true, + "labels": "chart:example-app,name:coagents-research-canvas,namespace:pr-test-321", + "chart": "./charts/example-app", + "version": "" + } +] \ No newline at end of file diff --git a/examples/helmfile/helmfile.yaml b/examples/helmfile/helmfile.yaml new file mode 100644 index 0000000000..9496439c78 --- /dev/null +++ b/examples/helmfile/helmfile.yaml @@ -0,0 +1,62 @@ +environments: + default: + values: + - ./environments/default.yaml +--- +helmDefaults: + wait: true + timeout: 300 +--- +releases: + - name: examples-shared + chart: ./charts/examples-shared + namespace: {{ .Values.environment }} + values: [./charts/examples-shared/values.yaml.gotmpl] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} + + - name: 'coagents-research-canvas' + chart: ./charts/example-app + namespace: {{ .Values.environment }} + values: [./values/coagents-research-canvas.yaml.gotmpl] + needs: [examples-shared] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} + + - name: 'coagents-routing' + chart: ./charts/example-app + namespace: {{ .Values.environment }} + values: [./values/coagents-routing.yaml.gotmpl] + needs: [examples-shared] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} + + - name: 'coagents-qa-text' + chart: ./charts/example-app + namespace: {{ .Values.environment }} + values: [./values/coagents-qa-text.yaml.gotmpl] + needs: [examples-shared] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} + + - name: 'coagents-qa-native' + chart: ./charts/example-app + namespace: {{ .Values.environment }} + values: [./values/coagents-qa-native.yaml.gotmpl] + needs: [examples-shared] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} + + - name: 'next-openai' + chart: ./charts/example-app + namespace: {{ .Values.environment }} + values: [./values/next-openai.yaml.gotmpl] + needs: [examples-shared] + labels: + metadata.copilotkit.preview: {{ hasPrefix "pr-" .Values.environment | quote }} + metadata.copilotkit.updated-at: {{ dateInZone "2006-01-02T15:04:05" (now) "UTC" }} \ No newline at end of file diff --git a/examples/helmfile/package.json b/examples/helmfile/package.json new file mode 100644 index 0000000000..8898c10ef2 --- /dev/null +++ b/examples/helmfile/package.json @@ -0,0 +1,12 @@ +{ + "name": "helmfile", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": {}, + "author": "", + "license": "ISC", + "devDependencies": { + "json2md": "^2.0.1" + } +} diff --git a/examples/helmfile/pnpm-lock.yaml b/examples/helmfile/pnpm-lock.yaml new file mode 100644 index 0000000000..9385387e3f --- /dev/null +++ b/examples/helmfile/pnpm-lock.yaml @@ -0,0 +1,29 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + json2md: + specifier: ^2.0.1 + version: 2.0.1 + +packages: + + indento@1.1.13: + resolution: {integrity: sha512-YZWk3mreBEM7sBPddsiQnW9Z8SGg/gNpFfscJq00HCDS7pxcQWWWMSVKJU7YkTRyDu1Zv2s8zaK8gQWKmCXHlg==} + + json2md@2.0.1: + resolution: {integrity: sha512-VbwmZ83qmUfKBS2pUOHlzNKEZFPBeJSbzEok3trMYyboZUgdHNn1XZfc1uT8UZs1GHCrmRUBXCfqw4YmmQuOhw==} + +snapshots: + + indento@1.1.13: {} + + json2md@2.0.1: + dependencies: + indento: 1.1.13 diff --git a/examples/helmfile/values/coagents-qa-native.yaml.gotmpl b/examples/helmfile/values/coagents-qa-native.yaml.gotmpl new file mode 100644 index 0000000000..104d4468ad --- /dev/null +++ b/examples/helmfile/values/coagents-qa-native.yaml.gotmpl @@ -0,0 +1,92 @@ +environment: "{{ .Values.environment }}" + +app: + name: coagents-qa-native + +deployments: + - name: coagents-qa-native-ui + type: ui + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-native-ui" + tag: "{{ .Values.globalImageTag }}" + port: 3000 + command: ["npm", "start", "--", "-H", "0.0.0.0", "--port", "3000"] + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/ui/secrets" }} + env: + - name: REMOTE_ACTION_URL + value: "http://coagents-qa-native-agent-fastapi:8000/copilotkit" + outputs: + type: ui + dependencies: local + description: "CoAgents Research Canvas" + + - name: coagents-qa-native-agent-fastapi + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-native-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-fastapi + dependencies: local + + - name: coagents-qa-native-agent-lgc-python + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-native-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + command: ["/bin/sh", "-c","langgraph dev --no-browser --port=8000 --config=langgraph.json --host=0.0.0.0"] + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-python + dependencies: local + + - name: coagents-qa-native-agent-lgc-js + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-native-agent-js-remote-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-js + dependencies: remote diff --git a/examples/helmfile/values/coagents-qa-text.yaml.gotmpl b/examples/helmfile/values/coagents-qa-text.yaml.gotmpl new file mode 100644 index 0000000000..cf59423100 --- /dev/null +++ b/examples/helmfile/values/coagents-qa-text.yaml.gotmpl @@ -0,0 +1,93 @@ +environment: "{{ .Values.environment }}" + +app: + name: coagents-qa-text + +deployments: + - name: coagents-qa-text-ui + type: ui + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-text-ui" + tag: "{{ .Values.globalImageTag }}" + port: 3000 + command: ["npm", "start", "--", "-H", "0.0.0.0", "--port", "3000"] + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/ui/secrets" }} + env: + - name: REMOTE_ACTION_URL + value: "http://coagents-qa-text-agent-fastapi:8000/copilotkit" + outputs: + type: ui + dependencies: local + description: "CoAgents Research Canvas" + + - name: coagents-qa-text-agent-fastapi + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-text-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-fastapi + dependencies: local + + - name: coagents-qa-text-agent-lgc-python + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-text-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + command: ["/bin/sh", "-c","langgraph dev --no-browser --port=8000 --config=langgraph.json --host=0.0.0.0"] + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-python + dependencies: local + + - name: coagents-qa-text-agent-lgc-js + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-qa-text-agent-js-remote-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-js + dependencies: remote + diff --git a/examples/helmfile/values/coagents-research-canvas.yaml.gotmpl b/examples/helmfile/values/coagents-research-canvas.yaml.gotmpl new file mode 100644 index 0000000000..927d2ac6d7 --- /dev/null +++ b/examples/helmfile/values/coagents-research-canvas.yaml.gotmpl @@ -0,0 +1,92 @@ +environment: "{{ .Values.environment }}" + +app: + name: coagents-research-canvas + +deployments: + - name: coagents-research-canvas-ui + type: ui + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-research-canvas-ui" + tag: "{{ .Values.globalImageTag }}" + port: 3000 + command: ["npm", "start", "--", "-H", "0.0.0.0", "--port", "3000"] + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/ui/secrets" }} + env: + - name: REMOTE_ACTION_URL + value: "http://coagents-research-canvas-agent-fastapi:8000/copilotkit" + outputs: + type: ui + dependencies: local + description: "CoAgents Research Canvas" + + - name: coagents-research-canvas-agent-fastapi + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-research-canvas-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-fastapi + dependencies: local + + - name: coagents-research-canvas-agent-lgc-python + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-research-canvas-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + command: ["/bin/sh", "-c","langgraph dev --no-browser --port=8000 --config=langgraph.json --host=0.0.0.0"] + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-python + dependencies: local + + - name: coagents-research-canvas-agent-lgc-js + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-research-canvas-agent-js-remote-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-js + dependencies: remote diff --git a/examples/helmfile/values/coagents-routing.yaml.gotmpl b/examples/helmfile/values/coagents-routing.yaml.gotmpl new file mode 100644 index 0000000000..a4d5b41b59 --- /dev/null +++ b/examples/helmfile/values/coagents-routing.yaml.gotmpl @@ -0,0 +1,92 @@ +environment: "{{ .Values.environment }}" + +app: + name: coagents-routing + +deployments: + - name: coagents-routing-ui + type: ui + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-routing-ui" + tag: "{{ .Values.globalImageTag }}" + port: 3000 + command: ["npm", "start", "--", "-H", "0.0.0.0", "--port", "3000"] + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/ui/secrets" }} + env: + - name: REMOTE_ACTION_URL + value: "http://coagents-routing-agent-fastapi:8000/copilotkit" + outputs: + type: ui + dependencies: local + description: "CoAgents Research Canvas" + + - name: coagents-routing-agent-fastapi + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-routing-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-fastapi + dependencies: local + + - name: coagents-routing-agent-lgc-python + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-routing-agent-python-local-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + command: ["/bin/sh", "-c","langgraph dev --no-browser --port=8000 --config=langgraph.json --host=0.0.0.0"] + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-python + dependencies: local + + - name: coagents-routing-agent-lgc-js + type: agent + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:coagents-routing-agent-js-remote-deps" + tag: "{{ .Values.globalImageTag }}" + port: 8000 + livenessProbe: + exec: + command: ["/bin/sh", "-c", "curl -L 'http://localhost:8000/assistants/search' -H 'Content-Type: application/json' -d '{}'"] + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/coagents-research-canvas/agent/secrets" }} + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + outputs: + type: agent-lgc-js + dependencies: remote diff --git a/examples/helmfile/values/next-openai.yaml.gotmpl b/examples/helmfile/values/next-openai.yaml.gotmpl new file mode 100644 index 0000000000..6860c64735 --- /dev/null +++ b/examples/helmfile/values/next-openai.yaml.gotmpl @@ -0,0 +1,23 @@ +environment: "{{ .Values.environment }}" + +app: + name: next-openai + +deployments: + - name: next-openai + image: + repository: "058264219587.dkr.ecr.us-east-1.amazonaws.com/coagents:next-openai" + tag: "{{ .Values.globalImageTag }}" + port: 3000 + command: ["npm", "start", "--", "-H", "0.0.0.0", "--port", "3000"] + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + config: + secretsJson: {{ fetchSecretValue "ref+awssecrets://demos/next-openai/secrets" }} + outputs: + type: ui + dependencies: local + description: "CoAgents Research Canvas" \ No newline at end of file diff --git a/infra/.gitignore b/infra/.gitignore deleted file mode 100644 index f1b810ff89..0000000000 --- a/infra/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out -preview-comment.md -cdk_outputs.json -cdk_outputs_processed.json -.env.test \ No newline at end of file diff --git a/infra/.npmignore b/infra/.npmignore deleted file mode 100644 index c1d6d45dcf..0000000000 --- a/infra/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/infra/README.md b/infra/README.md deleted file mode 100644 index 9315fe5b9f..0000000000 --- a/infra/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Welcome to your CDK TypeScript project - -This is a blank project for CDK development with TypeScript. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -## Useful commands - -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `npx cdk deploy` deploy this stack to your default AWS account/region -* `npx cdk diff` compare deployed stack with current state -* `npx cdk synth` emits the synthesized CloudFormation template diff --git a/infra/bin/infra.ts b/infra/bin/infra.ts deleted file mode 100644 index bb68642b29..0000000000 --- a/infra/bin/infra.ts +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env node -import "source-map-support/register"; -import * as cdk from "aws-cdk-lib"; -import { createAgentProjectStack, createNextOpenAIProjectStack, createUIProjectStack } from "../lib/utils"; - -// app -const app = new cdk.App(); - -/* - * Research Canvas - */ - -const coAgentsResearchCanvasAgentWithLocalDeps = createAgentProjectStack({ - app, - project: "coagents-research-canvas", - description: "CoAgents Research Canvas (Agent) - Local Depenencies", - dependencies: "Local" -}); - -const coAgentsResearchCanvasUIWithLocalDeps = createUIProjectStack({ - app, - project: "coagents-research-canvas", - description: "CoAgents Research Canvas (UI) - Local Depenencies", - dependencies: "Local", - selfHostedAgentProject: coAgentsResearchCanvasAgentWithLocalDeps.selfHostedAgent, - lgcAgentProjectPython: coAgentsResearchCanvasAgentWithLocalDeps.lgcAgentPython, - environmentVariables: {}, - customOutputs: { - "LgcJSDeploymentUrl": `https://coagents-research-canvas-st-08476feebc3a58e5925116da0d3ad635.default.us.langgraph.app` - } -}); - -/* - * CoAgents Routing Demo - */ - -const coAgentsRoutingAgentWithLocalDeps = createAgentProjectStack({ - app, - project: "coagents-routing", - description: "CoAgents Routing (Agent) - Local Dependencies", - dependencies: "Local" -}); - -const coAgentsRoutingUIWithLocalDeps = createUIProjectStack({ - app, - project: "coagents-routing", - description: "CoAgents Routing (UI) - Local Dependencies", - dependencies: "Local", - selfHostedAgentProject: coAgentsRoutingAgentWithLocalDeps.selfHostedAgent, - lgcAgentProjectPython: coAgentsRoutingAgentWithLocalDeps.lgcAgentPython, - environmentVariables: {}, - customOutputs: { - "LgcJSDeploymentUrl": `https://coagents-routing-stg-js-4df4be4cab70578ca535df7e1c0b05cf.default.us.langgraph.app` - } -}); - -/* - * CoAgents QA Text Demo - */ - -const qaTextAgentWithLocalDeps = createAgentProjectStack({ - app, - project: "coagents-qa-text", - description: "CoAgents QA Text (Agent) - Local Dependencies", - dependencies: "Local" -}); - -const qaTextUIWithLocalDeps = createUIProjectStack({ - app, - project: "coagents-qa-text", - description: "CoAgents QA Text (UI) - Local Dependencies", - dependencies: "Local", - selfHostedAgentProject: qaTextAgentWithLocalDeps.selfHostedAgent, - lgcAgentProjectPython: qaTextAgentWithLocalDeps.lgcAgentPython, - environmentVariables: {}, - customOutputs: { - "LgcJSDeploymentUrl": `https://coagents-qa-text-stg-js-4d74616e480750d0a5d10d0c3c5d44a4.default.us.langgraph.app` - } -}); - -/* - * CoAgents QA Native Demo - */ - -const qaNativeAgentWithLocalDeps = createAgentProjectStack({ - app, - project: "coagents-qa-native", - description: "CoAgents QA Native (Agent) - Local Dependencies", - dependencies: "Local" -}); - -const qaNativeUIWithLocalDeps = createUIProjectStack({ - app, - project: "coagents-qa-native", - description: "CoAgents QA Native (UI) - Local Dependencies", - dependencies: "Local", - selfHostedAgentProject: qaNativeAgentWithLocalDeps.selfHostedAgent, - lgcAgentProjectPython: qaNativeAgentWithLocalDeps.lgcAgentPython, - environmentVariables: {}, - customOutputs: { - "LgcJSDeploymentUrl": `https://coagents-qa-native-stg-js-036615e530e8593286ccf93d3003ffe2.default.us.langgraph.app` - } -}); - -/** - * Next OpenAI Demo - */ -createNextOpenAIProjectStack({ - app, - description: "Next OpenAI - Self Hosted", - variant: "self-hosted", -}); \ No newline at end of file diff --git a/infra/cdk.json b/infra/cdk.json deleted file mode 100644 index 7baab3f6c1..0000000000 --- a/infra/cdk.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "app": "npx ts-node --prefer-ts-exts bin/infra.ts", - "watch": { - "include": [ - "**" - ], - "exclude": [ - "README.md", - "cdk*.json", - "**/*.d.ts", - "**/*.js", - "tsconfig.json", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - }, - "context": { - "@aws-cdk/aws-lambda:recognizeLayerVersion": true, - "@aws-cdk/core:checkSecretUsage": true, - "@aws-cdk/core:target-partitions": [ - "aws", - "aws-cn" - ], - "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, - "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, - "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, - "@aws-cdk/aws-iam:minimizePolicies": true, - "@aws-cdk/core:validateSnapshotRemovalPolicy": true, - "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, - "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, - "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, - "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, - "@aws-cdk/core:enablePartitionLiterals": true, - "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, - "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, - "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, - "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, - "@aws-cdk/aws-route53-patters:useCertificate": true, - "@aws-cdk/customresources:installLatestAwsSdkDefault": false, - "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, - "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, - "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, - "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, - "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, - "@aws-cdk/aws-redshift:columnId": true, - "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, - "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, - "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, - "@aws-cdk/aws-kms:aliasNameRef": true, - "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, - "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, - "@aws-cdk/aws-efs:denyAnonymousAccess": true, - "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, - "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, - "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, - "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, - "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, - "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, - "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, - "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, - "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, - "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, - "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, - "@aws-cdk/aws-eks:nodegroupNameAttribute": true, - "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, - "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true, - "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false, - "@aws-cdk/aws-s3:keepNotificationInImportedBucket": false, - "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true, - "@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": true, - "@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": true, - "@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": true, - "@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": true, - "@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": true, - "@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": true, - "@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": true - } -} diff --git a/infra/generate-table.js b/infra/generate-table.js deleted file mode 100644 index a23c61ef4e..0000000000 --- a/infra/generate-table.js +++ /dev/null @@ -1,85 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const json2md = require("json2md"); - -const file = fs.readFileSync( - path.resolve(__dirname, "./cdk_outputs.json"), - "utf8" -); - -function generateTable() { - const structure = []; - structure.push({ h1: "Previews" }); - - structure.push({ - p: `**Commit SHA:** ${process.env.GITHUB_SHA?.substring(0, 7)}`, - }); - - const json = JSON.parse(file); - - // Group entries by ProjectName - const projectGroups = Object.values(json).reduce((acc, entry) => { - if (!acc[entry.ProjectName]) { - acc[entry.ProjectName] = { - name: entry.ProjectName, - remote: "", - local: "", - lgcPythonDeploymentUrl: undefined, - lgcJSDeploymentUrl: undefined, - }; - } - - // Add URLs based on dependency type - if (entry.Dependencies === "Remote") { - acc[entry.ProjectName].remote = entry.FunctionUrl; - } else if (entry.Dependencies === "Local") { - acc[entry.ProjectName].local = entry.FunctionUrl; - } - - // Add LGC Python Deployment URL if it exists - if (entry.LgcPythonDeploymentUrl) { - acc[entry.ProjectName].lgcPythonDeploymentUrl = entry.LgcPythonDeploymentUrl; - } - - // Add LGC JS Deployment URL if it exists - if (entry.LgcJSDeploymentUrl) { - acc[entry.ProjectName].lgcJSDeploymentUrl = entry.LgcJSDeploymentUrl; - } - - return acc; - }, {}); - - // Convert grouped data to rows array - const rows = Object.values(projectGroups).map((project) => { - let previewMdxString = `[Preview](${project.local})`; - - if (project.lgcPythonDeploymentUrl) { - previewMdxString += ` • [Preview with LGC Python](${project.local}?lgcDeploymentUrl=${project.lgcPythonDeploymentUrl})`; - } - - if (project.lgcJSDeploymentUrl) { - previewMdxString += ` • [Preview with LGC JS](${project.local}?lgcDeploymentUrl=${project.lgcJSDeploymentUrl})`; - } - - const row = { - Name: project.name, - "Preview": previewMdxString, - }; - - return row; - }); - - structure.push({ - table: { - // headers: ["Name", "Preview (Local Dependencies)", "Preview (Remote Dependencies)"], - headers: ["Name", "Preview"], - rows, - }, - }); - - const md = json2md(structure); - console.log(md); - fs.writeFileSync(path.resolve(__dirname, "./preview-comment.md"), md); -} - -generateTable(); diff --git a/infra/get-e2e-tests-urls.js b/infra/get-e2e-tests-urls.js deleted file mode 100644 index 5a57247776..0000000000 --- a/infra/get-e2e-tests-urls.js +++ /dev/null @@ -1,35 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const file = fs.readFileSync( - path.resolve(__dirname, "./cdk_outputs.json"), - "utf8" -); - -function generateTable() { - const json = JSON.parse(file); - const e2eUrls = {}; - - // Group entries by ProjectName - Object.values(json).forEach((value) => { - if (value.EndToEndProjectKey) { - e2eUrls[value.EndToEndProjectKey] = { - url: value.FunctionUrl, - description: value.ProjectDescription, - projectName: value.ProjectName - }; - - if (value.LgcPythonDeploymentUrl) { - e2eUrls[value.EndToEndProjectKey].lgcPythonDeploymentUrl = value.LgcPythonDeploymentUrl; - } - - if (value.LgcJSDeploymentUrl) { - e2eUrls[value.EndToEndProjectKey].lgcJSDeploymentUrl = value.LgcJSDeploymentUrl; - } - } - }, {}); - - console.log(JSON.stringify(e2eUrls, null, 2)); -} - -generateTable(); diff --git a/infra/jest.config.js b/infra/jest.config.js deleted file mode 100644 index 08263b8954..0000000000 --- a/infra/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - testEnvironment: 'node', - roots: ['/test'], - testMatch: ['**/*.test.ts'], - transform: { - '^.+\\.tsx?$': 'ts-jest' - } -}; diff --git a/infra/lib/demo-project-stack.ts b/infra/lib/demo-project-stack.ts deleted file mode 100644 index be76787b1f..0000000000 --- a/infra/lib/demo-project-stack.ts +++ /dev/null @@ -1,175 +0,0 @@ -import * as cdk from "aws-cdk-lib"; -import { Construct } from "constructs"; -import * as lambda from "aws-cdk-lib/aws-lambda"; -import * as ecr_assets from "aws-cdk-lib/aws-ecr-assets"; // Add this import -import * as path from "path"; -import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"; -import * as logs from "aws-cdk-lib/aws-logs"; // Add this import -import * as events from "aws-cdk-lib/aws-events"; -import * as targets from "aws-cdk-lib/aws-events-targets"; -import * as ecr from "aws-cdk-lib/aws-ecr"; -import { requireEnv } from "./utils"; - -export interface ProjectStackProps extends cdk.StackProps { - /** - * Path to the directory of the demo to deploy, relative to the root of the repository. - */ - projectName: string; - projectDescription: string; - demoDir: string; - /** - * Path to the Dockerfile to use, relative to the root of the repository. By default, this will be `${demoDir}/Dockerfile`. - */ - overrideDockerfile?: string; - environmentVariables?: { - [key: string]: string; - }; - environmentVariablesFromSecrets?: string[]; - buildSecrets?: string[]; - buildArgs?: Record; - port: string; - timeout?: number; - memorySize?: number; - includeInPRComment?: boolean; - outputEnvVariable?: string; - overrideBuildProps?: Partial; - imageTag: string; - outputs?: Record; - entrypoint?: string[]; - cmd?: string[]; -} - -export class PreviewProjectStack extends cdk.Stack { - fnUrl: string; - - constructor(scope: Construct, id: string, props: ProjectStackProps) { - const uniqueEnvironmentId = requireEnv("UNIQUE_ENV_ID"); - const processedId = `${id}${uniqueEnvironmentId}`; - - super(scope, processedId, props); - - const secrets = secretsmanager.Secret.fromSecretNameV2( - this, - "ApiKeys", - "previews/api-keys" - ); - - // Create explicit log groups - const logGroup = new logs.LogGroup(this, "FunctionLogGroup", { - logGroupName: `/aws/lambda/previews/${processedId}-Fn`, - removalPolicy: cdk.RemovalPolicy.DESTROY, - retention: logs.RetentionDays.ONE_WEEK, // Adjust retention as needed - }); - - let environmentVariables: Record = {}; - let buildSecrets: Record = {}; - - if (props.environmentVariables) { - environmentVariables = { ...props.environmentVariables }; - } - - if (props.environmentVariablesFromSecrets) { - for (const secret of props.environmentVariablesFromSecrets) { - environmentVariables[secret] = secrets - .secretValueFromJson(secret) - .unsafeUnwrap(); - } - } - - if(props.buildSecrets) { - for (const secret of props.buildSecrets) { - buildSecrets[secret] = `id=${secret}`; - } - } - - const buildArgs: Record = { - APP_DIR: props.demoDir, - }; - - if (props.buildArgs) { - Object.assign(buildArgs, props.buildArgs); - } - - const ecrRepository = ecr.Repository.fromRepositoryName(this, "ECRRepo", "coagents"); - - const fn = new lambda.Function(this, `Function`, { - logGroup: logGroup, - runtime: lambda.Runtime.FROM_IMAGE, - architecture: lambda.Architecture.X86_64, - handler: lambda.Handler.FROM_IMAGE, - environment: { - ...environmentVariables, - PORT: props.port.toString(), - AWS_LWA_INVOKE_MODE: "RESPONSE_STREAM", - }, - code: lambda.Code.fromEcrImage(ecrRepository, { - tagOrDigest: props.imageTag, - entrypoint: props.entrypoint, - cmd: props.cmd, - }), - timeout: cdk.Duration.seconds(props.timeout ?? 300), - memorySize: props.memorySize ?? 2048, - }); - - // const eventRule = new events.Rule(this, 'LambdaWarmUpSchedule', { - // schedule: events.Schedule.rate(cdk.Duration.minutes(1)), - // }); - - // eventRule.addTarget(new targets.LambdaFunction(fn)); - - // Add Function URL with streaming support - const fnUrl = fn.addFunctionUrl({ - authType: lambda.FunctionUrlAuthType.NONE, - cors: { - allowedOrigins: ["*"], - allowedMethods: [lambda.HttpMethod.ALL], - allowedHeaders: ["*"], - allowCredentials: true, - }, - invokeMode: lambda.InvokeMode.RESPONSE_STREAM, - }); - - this.fnUrl = fnUrl.url; - - // Output the Function URL - new cdk.CfnOutput(this, "FunctionUrl", { - value: fnUrl.url, - }); - - new cdk.CfnOutput(this, "IncludeInComment", { - value: `${props.includeInPRComment ?? false}`, - }); - - new cdk.CfnOutput(this, "StackId", { - value: this.stackId, - }); - - new cdk.CfnOutput(this, "StackName", { - value: this.stackName, - }); - - new cdk.CfnOutput(this, "ProjectName", { - value: props.projectName, - }); - - new cdk.CfnOutput(this, "ProjectDescription", { - value: props.projectDescription, - }); - - new cdk.CfnOutput(this, "UniqueEnvironmentId", { - value: `${uniqueEnvironmentId}`, - }); - - if (props.outputs) { - for (const [key, value] of Object.entries(props.outputs)) { - new cdk.CfnOutput(this, key, { - value: value, - }); - } - } - - // Add tag for PR number to all resources - cdk.Tags.of(this).add("env-id", uniqueEnvironmentId); - cdk.Tags.of(this).add("preview-env", "true"); - } -} diff --git a/infra/lib/utils.ts b/infra/lib/utils.ts deleted file mode 100644 index c0878f1c29..0000000000 --- a/infra/lib/utils.ts +++ /dev/null @@ -1,224 +0,0 @@ -import { App } from "aws-cdk-lib"; -import { PreviewProjectStack } from "./demo-project-stack"; - -export function requireEnv(name: string): string { - const value = process.env[name]; - if (!value) { - throw new Error(`Required environment variable ${name} is missing`); - } - return value; -} - -export function toCdkStackName(input: string) { - return input - .split("-") // Split the string by hyphens - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize each word - .join(""); // Join the words back together -} - -export function createAgentProjectStack({ - app, - project, - description, - dependencies, -}: { - app: App; - project: string; - description: string; - dependencies: "Remote" | "Local"; -}): { - selfHostedAgent: PreviewProjectStack; - lgcAgentPython: PreviewProjectStack; -} { - const cdkStackName = - toCdkStackName(project) + "Agent" + dependencies + "Deps"; - const dockerfile = - dependencies === "Remote" - ? `examples/Dockerfile.agent-remote-deps` - : `examples/Dockerfile.agent-local-deps`; - const GITHUB_ACTIONS_RUN_ID = requireEnv("GITHUB_ACTIONS_RUN_ID"); - - const outputs: Record = { - Dependencies: dependencies, - }; - - if (process.env.GITHUB_PR_NUMBER) { - outputs["PRNumber"] = process.env.GITHUB_PR_NUMBER; - } - - const selfHostedAgent = new PreviewProjectStack(app, cdkStackName, { - projectName: project, - projectDescription: description, - demoDir: `examples/${project}/agent`, - overrideDockerfile: dockerfile, - environmentVariablesFromSecrets: [ - "OPENAI_API_KEY", - "ANTHROPIC_API_KEY", - "GOOGLE_API_KEY", - "TAVILY_API_KEY", - ], - port: "8000", - includeInPRComment: false, - env: { - account: process.env.CDK_DEFAULT_ACCOUNT, - }, - imageTag: `${project}-agent-${ - dependencies === "Remote" ? "remote-deps" : "local-deps" - }-${GITHUB_ACTIONS_RUN_ID}`, - outputs: { - ...outputs, - LangGraphCloud: "false", - SelfHosted: "true" - }, - }); - - const lgcAgentPython = new PreviewProjectStack(app, `${cdkStackName}LGCPython`, { - projectName: project, - projectDescription: `${description} - LangGraph Cloud Python`, - demoDir: `examples/${project}/agent`, - overrideDockerfile: dockerfile, - environmentVariablesFromSecrets: [ - "OPENAI_API_KEY", - "ANTHROPIC_API_KEY", - "GOOGLE_API_KEY", - "TAVILY_API_KEY", - "LANGSMITH_API_KEY", - ], - port: "8000", - includeInPRComment: false, - env: { - account: process.env.CDK_DEFAULT_ACCOUNT, - }, - imageTag: `${project}-agent-${ - dependencies === "Remote" ? "remote-deps" : "local-deps" - }-${GITHUB_ACTIONS_RUN_ID}`, - entrypoint: ["/bin/sh", "-c"], - cmd: ["langgraph dev --no-browser --port=8000 --config=langgraph.json --host=0.0.0.0"], - outputs: { - ...outputs, - LangGraphCloud: "true", - SelfHosted: "false" - }, - }); - - return { selfHostedAgent, lgcAgentPython }; -} - -export function createUIProjectStack({ - app, - project, - description, - dependencies, - selfHostedAgentProject, - lgcAgentProjectPython, - environmentVariables, - environmentVariablesFromSecrets, - customOutputs, -}: { - app: App; - project: string; - description: string; - dependencies: "Remote" | "Local"; - selfHostedAgentProject: PreviewProjectStack; - lgcAgentProjectPython: PreviewProjectStack; - environmentVariables?: Record; - environmentVariablesFromSecrets?: string[]; - customOutputs?: Record; -}) { - const cdkStackName = toCdkStackName(project) + "UI" + dependencies + "Deps"; - const dockerfile = - dependencies === "Remote" - ? `examples/Dockerfile.ui-remote-deps` - : `examples/Dockerfile.ui-local-deps`; - const GITHUB_ACTIONS_RUN_ID = requireEnv("GITHUB_ACTIONS_RUN_ID"); - - const outputs: Record = { - Dependencies: dependencies, - EndToEndProjectKey: `${project}-ui-deps-${dependencies.toLocaleLowerCase()}`, - LgcPythonDeploymentUrl: `${lgcAgentProjectPython.fnUrl}` - }; - - if (customOutputs) { - Object.assign(outputs, customOutputs); - } - - if (process.env.GITHUB_PR_NUMBER) { - outputs["PRNumber"] = process.env.GITHUB_PR_NUMBER; - } - - return new PreviewProjectStack(app, cdkStackName, { - projectName: project, - projectDescription: `${description}`, - demoDir: `examples/${project}/ui`, - overrideDockerfile: dockerfile, - environmentVariablesFromSecrets: [ - "OPENAI_API_KEY", - "LANGSMITH_API_KEY", - ...(environmentVariablesFromSecrets ?? []), - ], - environmentVariables: { - REMOTE_ACTION_URL: `${selfHostedAgentProject.fnUrl}/copilotkit`, - ...environmentVariables, - }, - buildSecrets: ["OPENAI_API_KEY"], - port: "3000", - includeInPRComment: true, - env: { - account: process.env.CDK_DEFAULT_ACCOUNT, - }, - imageTag: `${project}-ui-${GITHUB_ACTIONS_RUN_ID}`, - outputs, - }); -} - -export function createNextOpenAIProjectStack({ - app, - description, - variant, - environmentVariables, - environmentVariablesFromSecrets, -}: { - app: App; - description: string; - variant: "self-hosted" | "against-cloud-prod" | "against-cloud-staging"; - environmentVariables?: Record; - environmentVariablesFromSecrets?: string[]; -}) { - const cdkStackName = toCdkStackName(`next-openai-${variant}`); - const dockerfile = `CopilotKit/examples/next-openai/Dockerfile`; - const GITHUB_ACTIONS_RUN_ID = requireEnv("GITHUB_ACTIONS_RUN_ID"); - - const outputs: Record = { - Variant: variant, - Dependencies: "Local", - EndToEndProjectKey: `next-openai-${variant}`, - }; - - if (process.env.GITHUB_PR_NUMBER) { - outputs["PRNumber"] = process.env.GITHUB_PR_NUMBER; - } - - return new PreviewProjectStack(app, cdkStackName, { - projectName: `next-openai`, - projectDescription: `${description}`, - demoDir: `CopilotKit/examples/next-openai`, - overrideDockerfile: dockerfile, - environmentVariablesFromSecrets: [ - "OPENAI_API_KEY", - "ANTHROPIC_API_KEY", - "GOOGLE_API_KEY", - "GROQ_API_KEY", - ...(environmentVariablesFromSecrets ?? []), - ], - environmentVariables: { - ...(environmentVariables ?? {}), - }, - port: "3000", - includeInPRComment: true, - env: { - account: process.env.CDK_DEFAULT_ACCOUNT, - }, - imageTag: `next-openai-${GITHUB_ACTIONS_RUN_ID}`, - outputs, - }); -} diff --git a/infra/package.json b/infra/package.json deleted file mode 100644 index 124222721f..0000000000 --- a/infra/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "infra", - "version": "0.1.0", - "bin": { - "infra": "bin/infra.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "devDependencies": { - "@types/jest": "^29.5.14", - "@types/node": "22.7.9", - "aws-cdk": "2.165.0", - "jest": "^29.7.0", - "json2md": "^2.0.1", - "ts-jest": "^29.2.5", - "ts-node": "^10.9.2", - "typescript": "~5.6.3" - }, - "dependencies": { - "aws-cdk-lib": "2.165.0", - "constructs": "^10.0.0", - "source-map-support": "^0.5.21" - } -} \ No newline at end of file diff --git a/infra/pnpm-lock.yaml b/infra/pnpm-lock.yaml deleted file mode 100644 index 7f1cdfee03..0000000000 --- a/infra/pnpm-lock.yaml +++ /dev/null @@ -1,2803 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - aws-cdk-lib: - specifier: 2.165.0 - version: 2.165.0(constructs@10.4.2) - constructs: - specifier: ^10.0.0 - version: 10.4.2 - source-map-support: - specifier: ^0.5.21 - version: 0.5.21 - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: 22.7.9 - version: 22.7.9 - aws-cdk: - specifier: 2.165.0 - version: 2.165.0 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - json2md: - specifier: ^2.0.1 - version: 2.0.1 - ts-jest: - specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)))(typescript@5.6.3) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.9)(typescript@5.6.3) - typescript: - specifier: ~5.6.3 - version: 5.6.3 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@aws-cdk/asset-awscli-v1@2.2.209': - resolution: {integrity: sha512-tL7aBDzx/QBuZoQso9OST2BMCoev89v01iQZicOKlR0J6vWQLPiqZfn4vd9nissFbM4X+xIwi3UKasPBTQL0WQ==} - - '@aws-cdk/asset-kubectl-v20@2.1.3': - resolution: {integrity: sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==} - - '@aws-cdk/asset-node-proxy-agent-v6@2.1.0': - resolution: {integrity: sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==} - - '@aws-cdk/cloud-assembly-schema@38.0.1': - resolution: {integrity: sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==} - bundledDependencies: - - jsonschema - - semver - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/node@22.7.9': - resolution: {integrity: sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - aws-cdk-lib@2.165.0: - resolution: {integrity: sha512-jCIUcaNDhAO/Yxik29L2LJiXkZImbEOlw/dWwhlcIx1eJyxUW+IWuMbGjXEMg8/QH56FBA5TLkZpTTsRstHS/Q==} - engines: {node: '>= 14.15.0'} - peerDependencies: - constructs: ^10.0.0 - bundledDependencies: - - '@balena/dockerignore' - - case - - fs-extra - - ignore - - jsonschema - - minimatch - - punycode - - semver - - table - - yaml - - mime-types - - aws-cdk@2.165.0: - resolution: {integrity: sha512-9j7i/qVBGmGJqu1xAKtawYo5AqI+6mI4pGmTdzNmrNfynDCrLVuVKSqf2LnhMh2KPWetEMiSPyyekfvXGWgZbw==} - engines: {node: '>= 14.15.0'} - hasBin: true - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001677: - resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - constructs@10.4.2: - resolution: {integrity: sha512-wsNxBlAott2qg8Zv87q3eYZYgheb9lchtBfjHzzLHtXbttwSrHPs1NNQbBrmbb1YZvYg2+Vh0Dor76w4mFxJkA==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.50: - resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indento@1.1.13: - resolution: {integrity: sha512-YZWk3mreBEM7sBPddsiQnW9Z8SGg/gNpFfscJq00HCDS7pxcQWWWMSVKJU7YkTRyDu1Zv2s8zaK8gQWKmCXHlg==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json2md@2.0.1: - resolution: {integrity: sha512-VbwmZ83qmUfKBS2pUOHlzNKEZFPBeJSbzEok3trMYyboZUgdHNn1XZfc1uT8UZs1GHCrmRUBXCfqw4YmmQuOhw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-jest@29.2.5: - resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@aws-cdk/asset-awscli-v1@2.2.209': {} - - '@aws-cdk/asset-kubectl-v20@2.1.3': {} - - '@aws-cdk/asset-node-proxy-agent-v6@2.1.0': {} - - '@aws-cdk/cloud-assembly-schema@38.0.1': {} - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.2': {} - - '@babel/core@7.26.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - convert-source-map: 2.0.0 - debug: 4.3.7 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.2': - dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - - '@babel/helper-compilation-targets@7.25.9': - dependencies: - '@babel/compat-data': 7.26.2 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.25.9': {} - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helpers@7.26.0': - dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - - '@babel/parser@7.26.2': - dependencies: - '@babel/types': 7.26.0 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 - - '@babel/traverse@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - debug: 4.3.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@bcoe/v8-coverage@0.2.3': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.9 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.7.9 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.26.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.9 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@sinclair/typebox@0.27.8': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.26.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.26.0 - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.7.9 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/node@22.7.9': - dependencies: - undici-types: 6.19.8 - - '@types/stack-utils@2.0.3': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.0 - - acorn@8.14.0: {} - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@4.1.3: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - async@3.2.6: {} - - aws-cdk-lib@2.165.0(constructs@10.4.2): - dependencies: - '@aws-cdk/asset-awscli-v1': 2.2.209 - '@aws-cdk/asset-kubectl-v20': 2.1.3 - '@aws-cdk/asset-node-proxy-agent-v6': 2.1.0 - '@aws-cdk/cloud-assembly-schema': 38.0.1 - constructs: 10.4.2 - - aws-cdk@2.165.0: - optionalDependencies: - fsevents: 2.3.2 - - babel-jest@29.7.0(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.26.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.25.9 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) - - babel-preset-jest@29.6.3(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.24.2: - dependencies: - caniuse-lite: 1.0.30001677 - electron-to-chromium: 1.5.50 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001677: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - char-regex@1.0.2: {} - - ci-info@3.9.0: {} - - cjs-module-lexer@1.4.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - co@4.6.0: {} - - collect-v8-coverage@1.0.2: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - concat-map@0.0.1: {} - - constructs@10.4.2: {} - - convert-source-map@2.0.0: {} - - create-jest@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-require@1.1.1: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.3.7: - dependencies: - ms: 2.1.3 - - dedent@1.5.3: {} - - deepmerge@4.3.1: {} - - detect-newline@3.1.0: {} - - diff-sequences@29.6.3: {} - - diff@4.0.2: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.2 - - electron-to-chromium@1.5.50: {} - - emittery@0.13.1: {} - - emoji-regex@8.0.0: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - escalade@3.2.0: {} - - escape-string-regexp@2.0.0: {} - - esprima@4.0.1: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit@0.1.2: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - fast-json-stable-stringify@2.1.0: {} - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - fs.realpath@1.0.0: {} - - fsevents@2.3.2: - optional: true - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-package-type@0.1.0: {} - - get-stream@6.0.1: {} - - glob@7.2.3: - 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 - - globals@11.12.0: {} - - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - html-escaper@2.0.2: {} - - human-signals@2.1.0: {} - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - indento@1.1.13: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-arrayish@0.2.1: {} - - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-fn@2.1.0: {} - - is-number@7.0.0: {} - - is-stream@2.0.1: {} - - isexe@2.0.0: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.2 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.2 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.3.7 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.3 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)): - dependencies: - '@babel/core': 7.26.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.7.9 - ts-node: 10.9.2(@types/node@22.7.9)(typescript@5.6.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 22.7.9 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.26.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - - jest-runner@29.7.0: - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - chalk: 4.1.2 - cjs-module-lexer: 1.4.1 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.26.0 - '@babel/generator': 7.26.2 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.9 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 22.7.9 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - jsesc@3.0.2: {} - - json-parse-even-better-errors@2.3.1: {} - - json2md@2.0.1: - dependencies: - indento: 1.1.13 - - json5@2.2.3: {} - - kleur@3.0.3: {} - - leven@3.1.0: {} - - lines-and-columns@1.2.4: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - lodash.memoize@4.1.2: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - make-dir@4.0.0: - dependencies: - semver: 7.6.3 - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - merge-stream@2.0.0: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mimic-fn@2.1.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - ms@2.1.3: {} - - natural-compare@1.4.0: {} - - node-int64@0.4.0: {} - - node-releases@2.0.18: {} - - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-try@2.2.0: {} - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.26.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - pirates@4.0.6: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - pure-rand@6.1.0: {} - - react-is@18.3.1: {} - - require-directory@2.1.1: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@5.0.0: {} - - resolve.exports@2.0.2: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - semver@6.3.1: {} - - semver@7.6.3: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@3.0.7: {} - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - sprintf-js@1.0.3: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)))(typescript@5.6.3): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.7.9)(ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.6.3 - typescript: 5.6.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.26.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) - - ts-node@10.9.2(@types/node@22.7.9)(typescript@5.6.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.7.9 - acorn: 8.14.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.6.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - - typescript@5.6.3: {} - - undici-types@6.19.8: {} - - update-browserslist-db@1.1.1(browserslist@4.24.2): - dependencies: - browserslist: 4.24.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - v8-compile-cache-lib@3.0.1: {} - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yn@3.1.1: {} - - yocto-queue@0.1.0: {} diff --git a/infra/test/infra.test.ts b/infra/test/infra.test.ts deleted file mode 100644 index 2ee2d6937d..0000000000 --- a/infra/test/infra.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -// import * as cdk from 'aws-cdk-lib'; -// import { Template } from 'aws-cdk-lib/assertions'; -// import * as Infra from '../lib/infra-stack'; - -// example test. To run these tests, uncomment this file along with the -// example resource in lib/infra-stack.ts -test('SQS Queue Created', () => { -// const app = new cdk.App(); -// // WHEN -// const stack = new Infra.InfraStack(app, 'MyTestStack'); -// // THEN -// const template = Template.fromStack(stack); - -// template.hasResourceProperties('AWS::SQS::Queue', { -// VisibilityTimeout: 300 -// }); -}); diff --git a/infra/tsconfig.json b/infra/tsconfig.json deleted file mode 100644 index aaa7dc510f..0000000000 --- a/infra/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": [ - "es2020", - "dom" - ], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": [ - "./node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "cdk.out" - ] -}