diff --git a/.github/workflows/GenerateSdk.yml b/.github/workflows/GenerateSdk.yml new file mode 100644 index 0000000..fb70e69 --- /dev/null +++ b/.github/workflows/GenerateSdk.yml @@ -0,0 +1,156 @@ +# Display Name of the workflow +name: Generate SDKs + +on: + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # Generate the TypeScript SDK client code + TypeScript-Build: + # Generate each SDK client in a separate build process to speed up execution and publishing + strategy: + matrix: + # Spec and SDK root locations + specifications: + - SHIELD: + sdkPath: 'src/shield/TypeScript' + specPath: 'spec/SHIELD.json' + - DataGateway: + sdkPath: 'src/dataGateway/TypeScript' + specPath: 'spec/Data-Gateway.json' + + # Display name of the job + name: Generate TypeScript SDK + + # Operating system filter for the runners + runs-on: ubuntu-latest + + # Sets the scopes available to the github_token injected to the GH Actions runner + permissions: + attestations: write + contents: read + id-token: write + + # Set of steps required to generate the API client for TypeScript + steps: + # Download all of the source code + - name: Clone Repo Locally + uses: actions/checkout@v4 + + # Set up NodeJS on the build host + - name: Setup Node.JS Runtime + uses: actions/setup-node@v4 + with: + node-version: 22.x + cache: 'npm' + cache-dependency-path: 'package-lock.json' + + # Set up all of the supporting components for SDK generation + - name: Initialize Kiota Binaries + uses: microsoft/setup-kiota@v0.5.0 + + # Install the dependencies needed to build the project + - name: Install Build Dependencies + run: npm install + working-directory: ${{matrix.specifications.sdkPath}} + + # Cryptographically attest that packages haven't been tampered where supported + - name: Attest Provenance + run: npm audit signatures + working-directory: ${{matrix.specifications.sdkPath}} + + # Generate the TypeScript SDK + - name: Update kiota clients in the repository + run: npm run-script generate:Sdk + working-directory: ${{matrix.specifications.sdkPath}} + + # Generate the TypeScript SDK + - name: Build Project + run: npm run-script build:Prod + working-directory: ${{matrix.specifications.sdkPath}} + + # Ensure all the supporting files are present in the correct directory before publishing them + - name: Prep Files for Publish + run: cp LICENSE README.md package.json bin/ + working-directory: ${{matrix.specifications.sdkPath}} + + # Create a ZIP archive of the server files to speed up the upload process + - name: ZIP up SDK Files + run: zip -r sdk-${{matrix.specifications}}.zip . + working-directory: ${{matrix.specifications.sdkPath}}/bin + + # Create an attestation for the compiled package and upload it to the internal system for health tracking + - name: Attest Compiled Package + uses: actions/attest-build-provenance@v2 + with: + subject-path: ${{matrix.specifications.sdkPath}}/bin/sdk-${{matrix.specifications}}.zip + + # Upload compiled zip file so that other execution sessions can use it + - name: Upload Artifact for Deployment Job + uses: actions/upload-artifact@v4 + with: + compression-level: 9 + if-no-files-found: error + name: sdk-${{matrix.specifications}} + path: ${{matrix.specifications.sdkPath}}/bin/sdk-${{matrix.specifications}}.zip + retention-days: 1 + + # Isolate publish privileges from the build step to reduce surface area for attack by ensuring only the publish tools have credential access + TypeScript-Publish: + # Display name of the job + name: Publish TypeScript SDK + + # Operating system filter for the runners + runs-on: ubuntu-latest + + # Publish the package to NPM + environment: NPM + + # Sets the scopes available to the github_token injected to the GH Actions runner + permissions: + attestations: write + contents: read + id-token: write + + # Generate each SDK client in a separate build process to speed up execution and publishing + strategy: + matrix: + # Specification list + specifications: [SHIELD, DataGateway] + + # Only publish the SDK if the build succeeds + needs: + - TypeScript-Build + + # Set of steps required to generate the API client for TypeScript + steps: + # Set up NodeJS on the build host with caching support to optimize execution + - name: Set up Node.JS Runtime + uses: actions/setup-node@v4 + with: + node-version: 22 + registry-url: https://registry.npmjs.org/ + scope: shi-corp + + # Download the compiled server binary + - name: Download Artifact From Build Job + uses: actions/download-artifact@v4 + with: + name: sdk-${{matrix.specifications}} + + # Validate the attestation of the downloaded artifact to prevent tamper + - name: Validate Attestation + env: + GH_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: gh attestation verify sdk-${{matrix.specifications}}.zip --repo Software-Hardware-Integration-Lab/OpenAPI --signer-workflow Software-Hardware-Integration-Lab/OpenAPI/.github/workflows/GenerateSdk.yml@refs/heads/main + + # Extract the zip file and remove the container + - name: Unzip Artifact + run: unzip sdk-${{matrix.specifications}}.zip && rm sdk-${{matrix.specifications}}.zip + + # Publish the artifact to NPM with attestation + - name: Upload Package to NPM Registry + run: npm publish --access public --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH }} diff --git a/.github/workflows/Validate.yml b/.github/workflows/Validate.yml index 03455b2..437e08d 100644 --- a/.github/workflows/Validate.yml +++ b/.github/workflows/Validate.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Node.JS Environment uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 22.x # Sets up OpenJDK on the build host - name: Set up Microsoft OpenJDK @@ -44,6 +44,6 @@ jobs: # Run the validation of all Specification Files - name: Validate OpenAPI Specs run: | - for file in $(find . -path ./\.vscode -prune -name "*.json"); do + for file in $(find ./specs -name "*.json"); do openapi-generator-cli validate -i "$file" done diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..716edda --- /dev/null +++ b/.gitignore @@ -0,0 +1,115 @@ +# Built Executables/Installers +dist/ + +# typescript compiled output +bin/ + +# Generated TypeScript SDKs +src/*/TypeScript/sdk + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# dotenv environment variables file +.env* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Scripts used during local development +shi_lab_dev_* diff --git a/OpenAPI.code-workspace b/OpenAPI.code-workspace new file mode 100644 index 0000000..872042a --- /dev/null +++ b/OpenAPI.code-workspace @@ -0,0 +1,68 @@ +{ + "folders": [ + { + "name": "API Specifications", + "path": "specs" + }, + { + "name": "Data Gateway", + "path": "src/dataGateway" + }, + { + "name": "SHIELD", + "path": "src/shield" + }, + { + "name": "GitHub Actions", + "path": ".github/workflows" + } + ], + "settings": { + "files.exclude": { + "node_modules": true + }, + "cSpell.enabledFileTypes": { + "*": true + }, + "editor.formatOnSave": true, + "editor.bracketPairColorization.enabled": true, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": true, + "typescript.format.insertSpaceBeforeFunctionParenthesis": false, + "typescript.format.semicolons": "insert", + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "typescript.format.insertSpaceAfterTypeAssertion": true, + "typescript.implementationsCodeLens.enabled": true, + "typescript.inlayHints.enumMemberValues.enabled": true, + "typescript.preferences.quoteStyle": "single", + "javascript.preferences.quoteStyle": "single", + "js/ts.implicitProjectConfig.target": "ES2022", + "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true, + "search.exclude": { + "**/*.js": true, + "**/*.js.map": true + }, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "yaml.format.singleQuote": true, + "powershell.codeFormatting.useConstantStrings": true, + "typescript.tsdk": "node_modules\\typescript\\lib", + "github.copilot.editor.enableAutoCompletions": false, + "cSpell.words": [ + "Entra", + "kiota", + "typia" + ] + }, + "extensions": { + "recommendations": [ + "streetsidesoftware.code-spell-checker", + "dbaeumer.vscode-eslint", + "gruntfuggly.todo-tree", + "PKief.material-icon-theme", + "SocketSecurity.vscode-socket-security", + "42Crunch.vscode-openapi" + ] + } +} diff --git a/Data-Gateway.json b/specs/Data-Gateway.json similarity index 97% rename from Data-Gateway.json rename to specs/Data-Gateway.json index 7431d17..f6f6df2 100644 --- a/Data-Gateway.json +++ b/specs/Data-Gateway.json @@ -819,7 +819,7 @@ "title": "Update SHIELD Tenant - configuration entry", "type": "object" }, - "TenantDetails.Record": { + "TenantDetails.RecordData": { "title": "Tenant Details Record", "description": "Information about a single tenant record", "properties": { @@ -895,10 +895,10 @@ }, "openapi": "3.0.0", "paths": { - "/API/Core/Health/": { + "/Api/Core/Health/": { "get": { "description": "Check the health of the various components of the data gateway and report back. Useful for automated health probing.", - "operationId": "/API/ServiceHealth/Get", + "operationId": "/Api/ServiceHealth/Get", "responses": { "201": { "description": "Service is operational!" @@ -921,10 +921,10 @@ "summary": "Health of the Service for Probing" } }, - "/API/LicenseReport/": { + "/Api/LicenseReport/": { "post": { "description": "Store the results of a license analytics run.\n\nThis endpoint requires the `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", - "operationId": "/API/LicenseReport/Post", + "operationId": "/Api/LicenseReport/Post", "requestBody": { "content": { "application/json": { @@ -1075,10 +1075,10 @@ "summary": "Store License Analytics Data" } }, - "/API/LicenseReport/Correlation/": { + "/Api/LicenseReport/Correlation/": { "get": { "description": "Retrieves the list of correlation records for the authenticated tenant. Correlation records store the metadata for a specific license report.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.Read.All`, `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", - "operationId": "/API/LicenseReport/Correlation/Get", + "operationId": "/Api/LicenseReport/Correlation/Get", "responses": { "200": { "content": { @@ -1131,10 +1131,10 @@ "summary": "Retrieve the List of Correlation Records" } }, - "/API/LicenseReport/Correlation/Tenant/{tenantId}/": { + "/Api/LicenseReport/Correlation/Tenant/{tenantId}/": { "get": { "description": "Retrieves the list of correlation records for the specified tenant. Correlation records store the metadata for a specific license report.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/LicenseReport/Correlation/Tenant/:tenantId/Get", + "operationId": "/Api/LicenseReport/Correlation/Tenant/:tenantId/Get", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -1195,10 +1195,10 @@ "summary": "Retrieve the List of Correlation Records for Specified Tenant" } }, - "/API/LicenseReport/Correlation/{correlationId}/Data/": { + "/Api/LicenseReport/Correlation/{correlationId}/Data/": { "get": { "description": "Retrieves the full license report for the specified correlation ID in the authenticated tenant. The license report contains all of the license usage and compliance information with the required correlation data.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.Read.All`, `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", - "operationId": "/API/LicenseReport/Correlation/:correlationId/Data/Get", + "operationId": "/Api/LicenseReport/Correlation/:correlationId/Data/Get", "parameters": [ { "$ref": "#/components/parameters/correlationId" @@ -1287,10 +1287,10 @@ "summary": "Retrieve the Specified License Report" } }, - "/API/LicenseReport/Correlation/{correlationId}/Tenant/{tenantId}/Data/": { + "/Api/LicenseReport/Correlation/{correlationId}/Tenant/{tenantId}/Data/": { "get": { "description": "Retrieves the full license report for the specified correlation ID and tenant. The license report contains all of the license usage and compliance information with the required correlation data.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/Get", + "operationId": "/Api/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/Get", "parameters": [ { "$ref": "#/components/parameters/correlationId" @@ -1383,7 +1383,7 @@ }, "delete": { "description": "Deletes the full license report for the specified correlation ID and tenant.\n\nThis endpoint requires the `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/delete", + "operationId": "/Api/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/delete", "parameters": [ { "$ref": "#/components/parameters/correlationId" @@ -1412,10 +1412,10 @@ "summary": "Delete the Specified License Report for Specified Tenant" } }, - "/API/Entitlement/Shield/": { + "/Api/Entitlement/Shield/": { "post": { "description": "Creates a new license entitlement (activation) for SHIELD.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/Entitlement/Shield/Post", + "operationId": "/Api/Entitlement/Shield/Post", "requestBody": { "content": { "application/json": { @@ -1548,10 +1548,10 @@ "summary": "Creates a new License Entitlement for SHIELD." } }, - "/API/Entitlement/Shield/Active/": { + "/Api/Entitlement/Shield/Active/": { "get": { "description": "Retrieves the count of licenses that are available to the authenticated tenant. No scopes (permissions) required.", - "operationId": "/API/Entitlement/Shield/Active/Get", + "operationId": "/Api/Entitlement/Shield/Active/Get", "responses": { "200": { "content": { @@ -1629,10 +1629,10 @@ "summary": "List of Available Licenses" } }, - "/API/Entitlement/Shield/Tenant/{tenantId}/": { + "/Api/Entitlement/Shield/Tenant/{tenantId}/": { "get": { "description": "Retrieves the list of license entitlements that are assigned to the specified tenant.\n\nThis endpoint requires the `LicenseEntitlement.Read.All`, or `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/Entitlement/Shield/Tenant/:tenantId/Get", + "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Get", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -1669,10 +1669,10 @@ ] } }, - "/API/Entitlement/Shield/Tenant/{tenantId}/Correlation/{correlationId}/": { + "/Api/Entitlement/Shield/Tenant/{tenantId}/Correlation/{correlationId}/": { "delete": { "description": "Deletes the requested SHIELD license entitlement record.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/Entitlement/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", + "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -1704,10 +1704,10 @@ ] } }, - "/API/Telemetry/Shield/": { + "/Api/Telemetry/Shield/": { "post": { "description": "Submits the telemetry report for SHIELD.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", - "operationId": "/API/Telemetry/Shield/Post", + "operationId": "/Api/Telemetry/Shield/Post", "requestBody": { "content": { "application/json": { @@ -1796,7 +1796,7 @@ }, "get": { "description": "Retrieves the telemetry records that have been reported for the authenticated tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read`, `Telemetry.Shield.Read.All`, `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", - "operationId": "/API/Telemetry/Shield/Get", + "operationId": "/Api/Telemetry/Shield/Get", "responses": { "200": { "content": { @@ -1879,10 +1879,10 @@ ] } }, - "/API/Telemetry/Shield/Tenant/{tenantId}/": { + "/Api/Telemetry/Shield/Tenant/{tenantId}/": { "get": { "description": "Retrieves the telemetry records that have been reported for the specified tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read.All`, or `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/Telemetry/Shield/Tenant/:tenantId/Get", + "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Get", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -1976,10 +1976,10 @@ ] } }, - "/API/Telemetry/Shield/Tenant/{tenantId}/Correlation/{correlationId}/": { + "/Api/Telemetry/Shield/Tenant/{tenantId}/Correlation/{correlationId}/": { "delete": { "description": "Deletes the specified telemetry record for the specified tenant.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/API/Telemetry/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", + "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -2011,10 +2011,10 @@ ] } }, - "/API/Update/Shield/Channel/": { + "/Api/Update/Shield/Channel/": { "get": { "description": "Retrieves all of the channel configurations that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/Get", + "operationId": "/Api/Update/Shield/Channel/Get", "responses": { "200": { "content": { @@ -2045,10 +2045,10 @@ ] } }, - "/API/Update/Shield/Channel/{channelName}/": { + "/Api/Update/Shield/Channel/{channelName}/": { "get": { "description": "Retrieves configuration for the specific channel from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Get", + "operationId": "/Api/Update/Shield/Channel/:channelName/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2082,7 +2082,7 @@ }, "patch": { "description": "Updates (or adds when missing) the specified channel configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Patch", + "operationId": "/Api/Update/Shield/Channel/:channelName/Patch", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2162,7 +2162,7 @@ }, "delete": { "description": "Deletes the specified channel configuration and associated rings.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Delete", + "operationId": "/Api/Update/Shield/Channel/:channelName/Delete", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2188,10 +2188,10 @@ ] } }, - "/API/Update/Shield/Channel/{channelName}/Ring/": { + "/Api/Update/Shield/Channel/{channelName}/Ring/": { "get": { "description": "Retrieves all of the ring configurations for a channel that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Ring/Get", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2227,10 +2227,10 @@ ] } }, - "/API/Update/Shield/Channel/{channelName}/Ring/{number}/": { + "/Api/Update/Shield/Channel/{channelName}/Ring/{number}/": { "get": { "description": "Retrieves configuration for the specific channel ring from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Ring/:number/Get", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2267,7 +2267,7 @@ }, "patch": { "description": "Updates (or adds when missing) channel ring configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Ring/:number/Patch", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Patch", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2342,7 +2342,7 @@ }, "delete": { "description": "Deletes configuration of the specific channel ring.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Ring/:number/Delete", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Delete", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2371,10 +2371,10 @@ ] } }, - "/API/Update/Shield/Channel/{channelName}/Version/{version}/": { + "/Api/Update/Shield/Channel/{channelName}/Version/{version}/": { "post": { "description": "Uploads new version of the update package for SHIELD in a specific channel.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Channel/:channelName/Version/:version/Post", + "operationId": "/Api/Update/Shield/Channel/:channelName/Version/:version/Post", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2416,10 +2416,10 @@ ] } }, - "/API/Update/Shield/Check/": { + "/Api/Update/Shield/Check/": { "get": { "description": "Retrieves the latest available version of the package for the running application. Version depends on the channel associated with the current tenant, or channel mentioned in the request, or default channel value. Applicable channel would be calculated on the server for each request.", - "operationId": "/API/Update/Shield/Check/Get", + "operationId": "/Api/Update/Shield/Check/Get", "responses": { "200": { "content": { @@ -2441,10 +2441,10 @@ ] } }, - "/API/Update/Shield/Check/Channel/{channelName}/": { + "/Api/Update/Shield/Check/Channel/{channelName}/": { "get": { "description": "Retrieves the latest available version of the package for the running application for the specific channel.", - "operationId": "/API/Update/Shield/Check/Channel/:channelName/Get", + "operationId": "/Api/Update/Shield/Check/Channel/:channelName/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2471,10 +2471,10 @@ ] } }, - "/API/Update/Shield/Download/": { + "/Api/Update/Shield/Download/": { "get": { "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package.", - "operationId": "/API/Update/Shield/Download/Get", + "operationId": "/Api/Update/Shield/Download/Get", "responses": { "200": { "description": "OK", @@ -2497,10 +2497,10 @@ ] } }, - "/API/Update/Shield/Download/Channel/{channelName}/": { + "/Api/Update/Shield/Download/Channel/{channelName}/": { "get": { "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package for the specific channel.", - "operationId": "/API/Update/Shield/Download/Channel/:channelName/Get", + "operationId": "/Api/Update/Shield/Download/Channel/:channelName/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -2531,10 +2531,10 @@ ] } }, - "/API/Update/Shield/Tenant/": { + "/Api/Update/Shield/Tenant/": { "get": { "description": "Retrieves all tenant configurations present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Tenant/Get", + "operationId": "/Api/Update/Shield/Tenant/Get", "responses": { "200": { "content": { @@ -2565,10 +2565,10 @@ ] } }, - "/API/Update/Shield/Tenant/{tenantId}/": { + "/Api/Update/Shield/Tenant/{tenantId}/": { "get": { "description": "Retrieves configuration for the specific tenant from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Tenant/:tenantId/Get", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Get", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -2602,7 +2602,7 @@ }, "patch": { "description": "Updates (or adds when missing) tenant configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Tenant/:tenantId/Patch", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Patch", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -2688,7 +2688,7 @@ }, "delete": { "description": "Deletes configuration for the specific tenant.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible form the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/API/Update/Shield/Tenant/:tenantId/Delete", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Delete", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -2714,10 +2714,10 @@ ] } }, - "/API/Tenant/" : { + "/Api/Tenant/": { "get": { "description": "Retrieves the list of tenant records. Can use filter by parent ID limit the results. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/API/Tenant/Get", + "operationId": "/Api/Tenant/Get", "parameters": [ { "$ref": "#/components/parameters/parentId" @@ -2731,7 +2731,7 @@ "type": "array", "minItems": 0, "items": { - "$ref": "#/components/schemas/TenantDetails.Record" + "$ref": "#/components/schemas/TenantDetails.RecordData" } }, "examples": { @@ -2761,7 +2761,7 @@ }, "description": "OK" }, - "404":{ + "404": { "$ref": "#/components/responses/404" }, "500": { @@ -2774,10 +2774,10 @@ ] } }, - "/API/Tenant/{tenantId}/": { + "/Api/Tenant/{tenantId}/": { "get": { "description": "Retrieves details of a specific tenant record. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/API/Tenant/:tenantId/Get", + "operationId": "/Api/Tenant/:tenantId/Get", "parameters": [ { "$ref": "#/components/parameters/tenantId" @@ -2791,7 +2791,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantDetails.Record" + "$ref": "#/components/schemas/TenantDetails.RecordData" }, "examples": { "Example Complete Tenant Record": { @@ -2813,7 +2813,7 @@ }, "description": "OK" }, - "404":{ + "404": { "$ref": "#/components/responses/404" }, "500": { @@ -2827,10 +2827,10 @@ }, "patch": { "description": "Update tenant record using provided information. Payload could contain any combination of existing properties. To remove a parent, set the parentId to be the same as the tenant ID value. This endpoint requires the `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/API/Tenant/:tenantId/Patch", + "operationId": "/Api/Tenant/:tenantId/Patch", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/tenantId" } ], "requestBody": { @@ -2865,13 +2865,19 @@ }, "anyOf": [ { - "required": [ "displayName" ] + "required": [ + "displayName" + ] }, { - "required": [ "parentId" ] + "required": [ + "parentId" + ] }, { - "required": [ "authorizedPrincipalList" ] + "required": [ + "authorizedPrincipalList" + ] } ] }, @@ -2895,7 +2901,10 @@ "description": "Sample payload requesting to update authorized principals for the tenant record", "summary": "Update Tenant Authorized Principals List", "value": { - "authorizedPrincipalList": [ "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" ] + "authorizedPrincipalList": [ + "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", + "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" + ] } } } @@ -2907,7 +2916,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantDetails.Record" + "$ref": "#/components/schemas/TenantDetails.RecordData" }, "examples": { "Example Complete Tenant Record": { @@ -2946,7 +2955,7 @@ "servers": [ { "description": "Server the hosts the API described in the document.", - "url": "https://api.shilab.com/" + "url": "https://api.shilab.com" } ], "tags": [ diff --git a/SHIELD.json b/specs/SHIELD.json similarity index 96% rename from SHIELD.json rename to specs/SHIELD.json index 27e0454..b531121 100644 --- a/SHIELD.json +++ b/specs/SHIELD.json @@ -191,7 +191,7 @@ "ServicePlans" ] }, - "Shield.Authenticator.Status": { + "Authenticator.RequestStatus": { "title": "Authentication - Status", "description": "List of credentials that are being waited for by SHIELD's internal authentication engine.", "properties": { @@ -203,7 +203,7 @@ "example": false }, { - "$ref": "#/components/schemas/Shield.Authenticator.Status.TokenAudience" + "$ref": "#/components/schemas/Authenticator.Status.TokenAudience" } ] }, @@ -219,7 +219,7 @@ "sccAuth" ] }, - "Shield.Authenticator.Status.TokenAudience": { + "Authenticator.Status.TokenAudience": { "title": "SHIELD - Authenticator - Status - Token Audience", "description": "If a access token is being requested, this is the audience that the access token should have when being submitted.", "properties": { @@ -235,7 +235,7 @@ "audience" ] }, - "Shield.Authenticator.Container.Credentials": { + "Authenticator.Container.Credentials": { "title": "SHIELD - Authenticator - SCC Auth", "description": "SHIELD - Defender, and Purview portal Container Credentials", "type": "object", @@ -253,13 +253,13 @@ "format": "date-time" }, "security": { - "$ref": "#/components/schemas/Shield.Authenticator.Container.Credentials.SccAuth" + "$ref": "#/components/schemas/Authenticator.Container.Credentials.SccAuth" }, "compliance": { - "$ref": "#/components/schemas/Shield.Authenticator.Container.Credentials.SccAuth" + "$ref": "#/components/schemas/Authenticator.Container.Credentials.SccAuth" }, "purview": { - "$ref": "#/components/schemas/Shield.Authenticator.Container.Credentials.SccAuth" + "$ref": "#/components/schemas/Authenticator.Container.Credentials.SccAuth" } }, "required": [ @@ -269,7 +269,7 @@ "purview" ] }, - "Shield.Authenticator.Container.Credentials.SccAuth": { + "Authenticator.Container.Credentials.SccAuth": { "title": "SHIELD - Authenticator - SCC Auth - Credential Container", "description": "Container for the credentials for a single SccAuth authenticated site.", "properties": { @@ -290,7 +290,7 @@ ], "type": "object" }, - "Shield.Discover.Status": { + "Discover.ExecutionStatus": { "title": "Discover - Status", "description": "Detailed status that indicates the current state of the Discover engine and its progress.", "type": "object", @@ -305,7 +305,7 @@ "running" ] }, - "Intermediary": { + "ManagedObject.Intermediary": { "description": "Base template for all intermediary objects to inherit from.", "properties": { "id": { @@ -340,7 +340,7 @@ "title": "Intermediary - Base Type", "type": "object" }, - "Intermediary.AVD": { + "ManagedObject.AvdIntermediary": { "properties": { "addressRangeCIDR": { "description": "Optional Virtual Network IP Address range, defaults to 10.0.0.0/16.", @@ -638,7 +638,7 @@ ], "title": "License Report - Complete Object" }, - "ManagedDevice": { + "ManagedObject.Device": { "title": "Managed Device", "description": "Structure that represents a all of the states a managed device could be in.", "type": "object", @@ -692,13 +692,13 @@ "uniqueGroupId" ] }, - "ManagedDevice.Privileged": { + "ManagedObject.PrivilegedDevice": { "description": "Set of properties that are available on privileged managed device objects only.", "title": "Managed Device - Privileged", "type": "object", "allOf": [ { - "$ref": "#/components/schemas/ManagedDevice" + "$ref": "#/components/schemas/ManagedObject.Device" }, { "type": "object", @@ -747,7 +747,7 @@ } ] }, - "ManagedUser": { + "ManagedObject.User": { "title": "Managed User", "description": "A user object that has limited properties. The user object is generated by combining multiple pieces of metadata from Entra ID and SHIELD.", "properties": { @@ -850,12 +850,12 @@ ], "type": "object" }, - "ManagedUser.Privileged": { + "ManagedObject.PrivilegedUser": { "title": "Managed User - Privileged", "description": "Additional settings that represent a privileged user object. All data in this structure is preserved in the settings engine's permanent storage system.", "allOf": [ { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" }, { "properties": { @@ -912,7 +912,7 @@ } ] }, - "ObjectPage.Intermediary.AVD": { + "ObjectPage.Intermediary.Avd": { "properties": { "@odata.count": { "nullable": true, @@ -926,12 +926,12 @@ "items": { "allOf": [ { - "$ref": "#/components/schemas/Intermediary" + "$ref": "#/components/schemas/ManagedObject.Intermediary" }, { "properties": { "properties": { - "$ref": "#/components/schemas/Intermediary.AVD" + "$ref": "#/components/schemas/ManagedObject.AvdIntermediary" } }, "type": "object" @@ -962,10 +962,10 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/ManagedDevice" + "$ref": "#/components/schemas/ManagedObject.Device" }, { - "$ref": "#/components/schemas/ManagedDevice.Privileged" + "$ref": "#/components/schemas/ManagedObject.PrivilegedDevice" } ] }, @@ -993,10 +993,10 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" }, { - "$ref": "#/components/schemas/ManagedUser.Privileged" + "$ref": "#/components/schemas/ManagedObject.PrivilegedUser" } ] }, @@ -1047,10 +1047,10 @@ }, "openapi": "3.0.0", "paths": { - "/API/Core/SystemRequirements/": { + "/Api/Core/SystemRequirements/": { "get": { "description": "Provides a detailed breakdown of if the system requirements are being met for the various components of the SHIELD.", - "operationId": "/API/Core/SystemRequirements/Get", + "operationId": "/Api/Core/SystemRequirements/Get", "responses": { "200": { "content": { @@ -1070,10 +1070,10 @@ "summary": "Indicates if the System Requirements are met or not." } }, - "/API/Auth/Id/": { + "/Api/Auth/Id/": { "get": { "description": "Provides the Tenant ID and the Application ID of the service principal that access tokens need to be issued against. This is also useful for configuring public clients to be able to authenticate to for auth code flows.", - "operationId": "/API/Auth/Id/Get", + "operationId": "/Api/Auth/Id/Get", "responses": { "200": { "content": { @@ -1112,11 +1112,11 @@ "summary": "Retrieves the IDs required to authenticate." } }, - "/API/Auth/Authenticator/": { + "/Api/Auth/Authenticator/": { "get": { "summary": "Provides Attestation for Authenticator App", "description": "Provides the attestation to the authenticator that this endpoint is authorized for receiving credentials from the authenticator.\n\nThis endpoint requires the `Authentication.Actions.Attest`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Auth/Authenticator/GetAttest", + "operationId": "/Api/Auth/Authenticator/GetAttest", "responses": { "200": { "content": { @@ -1136,11 +1136,11 @@ ] } }, - "/API/Auth/Authenticator/Cache/Status/": { + "/Api/Auth/Authenticator/Cache/Status/": { "get": { "summary": "Indicates if SHIELD is waiting for any credentials.", "description": "Provides a breakdown view of if SHIELD is waiting for any specific type of credential or credentials.\n\nThis endpoint requires the `Authentication.Read`, `Authentication.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Auth/Authenticator/Cache/Status/Get", + "operationId": "/Api/Auth/Authenticator/Cache/Status/Get", "responses": { "200": { "content": { @@ -1171,7 +1171,7 @@ } }, "schema": { - "$ref": "#/components/schemas/Shield.Authenticator.Status" + "$ref": "#/components/schemas/Authenticator.RequestStatus" } } }, @@ -1183,15 +1183,15 @@ ] } }, - "/API/Auth/Authenticator/Cache/SccAuth/": { + "/Api/Auth/Authenticator/Cache/SccAuth/": { "post": { "description": "Configure SHIELD to use the specific SCC Auth credentials from the authenticator app to run web requests on behalf of the end user.\n\nThis endpoint requires the `Authentication.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Auth/Authenticator/Cache/SccAuth/Post", + "operationId": "/Api/Auth/Authenticator/Cache/SccAuth/Post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Shield.Authenticator.Container.Credentials" + "$ref": "#/components/schemas/Authenticator.Container.Credentials" } } } @@ -1207,11 +1207,11 @@ ] } }, - "/API/Auth/Authenticator/Cache/AccessToken/": { + "/Api/Auth/Authenticator/Cache/AccessToken/": { "post": { "summary": "Provide Your SHIELD Authenticator Credentials - Access Token", "description": "Configure SHIELD to use the specific Access Token credentials from the authenticator app to run web requests on behalf of the end user.\n\nThis endpoint requires the `Authentication.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Auth/Authenticator/Cache/AccessToken/Post", + "operationId": "/Api/Auth/Authenticator/Cache/AccessToken/Post", "requestBody": { "content": { "application/json": { @@ -1245,11 +1245,11 @@ ] } }, - "/API/Update/": { + "/Api/Update/": { "get": { "summary": "Check if an Update Is Pending", "description": "Provides the state of the update engine. Where `true` means there is an update detected and `false` means there isn't an update available. This endpoint is available to all authorization levels.", - "operationId": "/API/Update/Get", + "operationId": "/Api/Update/Get", "responses": { "200": { "content": { @@ -1267,11 +1267,11 @@ ] } }, - "/API/Update/Check/": { + "/Api/Update/Check/": { "get": { "summary": "Check for a New Version", "description": "Checks with data gateway and compares the reported version to the version that is locally installed. If there is a difference, a new update is marked as available. Always returns the latest version available on data gateway, even if that version is installed locally.\n\nThis endpoint requires the `Update.Read`, `Update.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Update/Check/Get", + "operationId": "/Api/Update/Check/Get", "responses": { "200": { "content": { @@ -1296,11 +1296,11 @@ ] } }, - "/API/Update/Check/Channel/{Update Channel Name}/": { + "/Api/Update/Check/Channel/{Update Channel Name}/": { "get": { "summary": "Check for a New Version in Channel", "description": "Checks with the SHI Data Gateway in the specified update channel and compares the reported version to the version that is locally installed. If there is a difference, a new update is marked as available. Always returns the latest version available on data gateway, even if that version is installed locally.\n\nThis endpoint requires the `Update.Read`, `Update.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Update/Check/Channel/UpdateChannelName/Get", + "operationId": "/Api/Update/Check/Channel/UpdateChannelName/Get", "parameters": [ { "$ref": "#/components/parameters/updateChannelName" @@ -1330,11 +1330,11 @@ ] } }, - "/API/Update/Install/": { + "/Api/Update/Install/": { "post": { "summary": "Installs SHIELD Core Update", "description": "Installs the latest version that is available from SHI Data Gateway. Even if that version is the same that is installed.\n\nThis endpoint requires the `Update.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Update/Install/Post", + "operationId": "/Api/Update/Install/Post", "responses": { "204": { "description": "OK: Update Submitted to Azure" @@ -1345,11 +1345,11 @@ ] } }, - "/API/Update/Install/Channel/{Update Channel Name}/": { + "/Api/Update/Install/Channel/{Update Channel Name}/": { "post": { "summary": "Installs SHIELD Core Update from Channel", "description": "Installs the latest version that is available from SHI Data Gateway in the specified channel. Even if that version is the same that is installed.\n\nThis endpoint requires the `Update.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Update/Install/Channel/UpdateChannelName/Post", + "operationId": "/Api/Update/Install/Channel/UpdateChannelName/Post", "parameters": [ { "$ref": "#/components/parameters/updateChannelName" @@ -1365,11 +1365,11 @@ ] } }, - "/API/Update/Upload/": { + "/Api/Update/Upload/": { "post": { "summary": "Upload Custom Update Package", "description": "THIS API SHOULD ONLY BE USED IF INSTRUCTED BY SHI EMPLOYEES!\n\nUploads the specified ZIP package, validates signature and installs it if it matches. This ignores version numbers and will allow you to install the same version again if necessary.\n\nThis endpoint requires the `Update.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Update/Upload/Post", + "operationId": "/Api/Update/Upload/Post", "requestBody": { "content": { "application/octet-stream": { @@ -1390,17 +1390,17 @@ ] } }, - "/API/Discover/Status/": { + "/Api/Discover/Status/": { "get": { "summary": "State of the Discover Module.", "description": "Provides a detailed breakdown of the current state of the discover module and it progress.\n\nThis endpoint requires the `Discover.Read`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Discover/Status/Get", + "operationId": "/Api/Discover/Status/Get", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Shield.Discover.Status" + "$ref": "#/components/schemas/Discover.ExecutionStatus" } } }, @@ -1412,11 +1412,11 @@ ] } }, - "/API/Discover/Report/": { + "/Api/Discover/Report/": { "get": { "summary": "Start Discover's Report Generation", "description": "Starts the Discover module's report collection engine to create a license report and upload it to the data gateway.\n\nThis endpoint requires the `Discover.Action.Run`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Discover/Report/Start", + "operationId": "/Api/Discover/Report/Start", "responses": { "202": { "$ref": "#/components/responses/202" @@ -1430,10 +1430,10 @@ ] } }, - "/API/Discover/LicenseReport/Correlation/": { + "/Api/Discover/LicenseReport/Correlation/": { "get": { "description": "Retrieves the list of correlation records for the authenticated tenant. Correlation records store the metadata for a specific license report.\n\nThis endpoint requires the `Discover.Read`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Discover/LicenseReport/Correlation/Get", + "operationId": "/Api/Discover/LicenseReport/Correlation/Get", "responses": { "200": { "content": { @@ -1486,10 +1486,10 @@ "summary": "Retrieve the List of Correlation Records" } }, - "/API/Discover/LicenseReport/Correlation/{correlationId}/Data/": { + "/Api/Discover/LicenseReport/Correlation/{correlationId}/Data/": { "get": { "description": "Retrieves the full license report for the specified correlation ID in the authenticated tenant. The license report contains all of the license usage and compliance information with the required correlation data.\n\nThis endpoint requires the `Discover.Read`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Discover/LicenseReport/Correlation/:correlationId/Data/Get", + "operationId": "/Api/Discover/LicenseReport/Correlation/:correlationId/Data/Get", "parameters": [ { "$ref": "#/components/parameters/correlationId" @@ -1578,10 +1578,10 @@ "summary": "Retrieve the Specified License Report" } }, - "/API/Deploy/": { + "/Api/Deploy/": { "get": { "description": "Has the core infrastructure engine check if the config engine can initialize properly.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Deploy/Get", + "operationId": "/Api/Deploy/Get", "responses": { "200": { "content": { @@ -1616,7 +1616,7 @@ }, "post": { "description": "After the user consents, deploy the core security groups, scope tag, configurations and metadata.\n\nThis endpoint requires the `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Deploy/Post", + "operationId": "/Api/Deploy/Post", "requestBody": { "content": { "application/json": { @@ -1681,10 +1681,10 @@ "security": [] } }, - "/API/Deploy/Version/": { + "/Api/Deploy/Version/": { "get": { "description": "Gets the version of the API server and the architecture version deployed as well as the supported version of the architecture spec from the server.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Deploy/Version/Get", + "operationId": "/Api/Deploy/Version/Get", "responses": { "200": { "content": { @@ -1723,10 +1723,10 @@ ] } }, - "/API/Defend/Intermediary/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/": { + "/Api/Defend/Intermediary/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/": { "get": { "description": "Retrieves a list of all AVD intermediaries for the specified security class filter. Next links may be provided for pagination to allow for good performance on larger environments. If a nextLink is return, not all data was returned on this query and the next link can be sent back to the API to get the next page of data.\n\nThis endpoint requires the `Intermediary.Privileged.Read`, `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.Read`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, `Intermediary.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/Type/:securityClass/Offering/AVD/Get", + "operationId": "/Api/Defend/Intermediary/Type/:securityClass/Offering/AVD/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -1743,7 +1743,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPage.Intermediary.AVD" + "$ref": "#/components/schemas/ObjectPage.Intermediary.Avd" } } }, @@ -1762,10 +1762,10 @@ ] } }, - "/API/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/": { + "/Api/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/": { "delete": { "description": "Deletes the specified intermediary (by the parent group's Entra ID Object ID) using the requested security class as a filter.\n\nThis endpoint requires the `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Delete", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Delete", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -1795,7 +1795,7 @@ }, "get": { "description": "Retrieves the specified intermediary (by the parent group's Entra ID Object ID) using the requested security class as a filter.\n\nThis endpoint requires the `Intermediary.Privileged.Read`, `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.Read`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, `Intermediary.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Get", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -1809,7 +1809,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPage.Intermediary.AVD" + "$ref": "#/components/schemas/ObjectPage.Intermediary.Avd" } } }, @@ -1831,10 +1831,10 @@ ] } }, - "/API/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/Assign/": { + "/Api/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/Assign/": { "delete": { "description": "Removes the specified user(s) as identified by their Object ID from the AVD cluster and deletes their corresponding session host(s).\n\nThis endpoint requires the `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Delete", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Delete", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -1905,7 +1905,7 @@ }, "get": { "description": "Gets the list of assigned user from the specified AVD Intermediary.\n\nThis endpoint requires the `Intermediary.Privileged.Read`, `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.Read`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, `Intermediary.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Get", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -1945,7 +1945,7 @@ }, "post": { "description": "Assigns the specified user(s) as identified by their Object ID to the AVD cluster and create corresponding session host(s) for them.\n\nThis endpoint requires the `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Post", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/Post", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2001,7 +2001,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" }, "minItems": 0, "type": "array" @@ -2026,10 +2026,10 @@ ] } }, - "/API/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/Assign/{userId}/": { + "/Api/Defend/Intermediary/{intermediaryId}/Type/{securityClass}/Offering/8a921026-ec06-4e08-af19-8812e161e61f/Assign/{userId}/": { "get": { "description": "Get the specified managed user's from the specified AVD intermediary assignment list.\n\nThis endpoint requires the `Intermediary.Privileged.Read`, `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.Read`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, `Intermediary.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/:userId/Get", + "operationId": "/Api/Defend/Intermediary/:intermediaryId/Type/:securityClass/Offering/AVD/Assign/:userId/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2068,10 +2068,10 @@ ] } }, - "/API/Defend/Device/{deviceId}/Type/Privileged/Assign/": { + "/Api/Defend/Device/{deviceId}/Type/Privileged/Assign/": { "delete": { "description": "Remove the specified user list from the device.\n\nThis endpoint requires the `Device.Privileged.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Defend/Device/:deviceId/Type/Privileged/Assign/Delete", + "operationId": "/Api/Defend/Device/:deviceId/Type/Privileged/Assign/Delete", "parameters": [ { "$ref": "#/components/parameters/deviceId" @@ -2124,7 +2124,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" }, "minItems": 0, "type": "array" @@ -2147,7 +2147,7 @@ }, "get": { "description": "Lists all of the users that are currently assigned to the specified device.\n\nThis endpoint requires the `Device.Privileged.Read`, `Device.Privileged.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Defend/Device/:deviceId/Type/Privileged/Assign/Get", + "operationId": "/Api/Defend/Device/:deviceId/Type/Privileged/Assign/Get", "parameters": [ { "$ref": "#/components/parameters/deviceId" @@ -2178,7 +2178,7 @@ }, "post": { "description": "Adds the specified list of users to the list of users that are allowed to log in on the specific privileged device.\n\nThis endpoint requires the `Device.Privileged.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/API/Defend/Device/:deviceId/Type/Privileged/Assign/Post", + "operationId": "/Api/Defend/Device/:deviceId/Type/Privileged/Assign/Post", "parameters": [ { "$ref": "#/components/parameters/deviceId" @@ -2231,7 +2231,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" }, "minItems": 0, "type": "array" @@ -2253,10 +2253,10 @@ ] } }, - "/API/Defend/Device/Type/{securityClass}/": { + "/Api/Defend/Device/Type/{securityClass}/": { "get": { "description": "Returns a list of all devices managed or unmanaged.\n\nThis endpoint requires the `Device.Privileged.Read`, `Device.Privileged.ReadWrite`, `Device.Specialized.Read`, `Device.Specialized.ReadWrite`, `Device.Enterprise.ReadWrite`, `Device.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL. When reading the `unmanaged` objects, any security class permission can read them, no need for a specific `unmanaged` class assignment.", - "operationId": "/API/Defend/Device/Type/:securityClass/Get", + "operationId": "/Api/Defend/Device/Type/:securityClass/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2293,7 +2293,7 @@ }, "post": { "description": "Commissions a new device, into the device hierarchy and appends appropriate metadata and initial policies. Appends required metadata to proper locations.\n\nThis endpoint requires the `Device.Privileged.ReadWrite`, `Device.Specialized.ReadWrite`, `Device.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Device/Type/:securityClass/Post", + "operationId": "/Api/Defend/Device/Type/:securityClass/Post", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2330,7 +2330,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ManagedDevice" + "$ref": "#/components/schemas/ManagedObject.Device" } } }, @@ -2352,10 +2352,10 @@ ] } }, - "/API/Defend/Device/{deviceId}/Type/{securityClass}/": { + "/Api/Defend/Device/{deviceId}/Type/{securityClass}/": { "delete": { "description": "Removes the device from the management hierarchy, removes metadata tagging and issues the wipe command to the devices.\n\nThis endpoint requires the `Device.Privileged.ReadWrite`, `Device.Specialized.ReadWrite`, `Device.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Device/:deviceId/Type/:securityClass/Delete", + "operationId": "/Api/Defend/Device/:deviceId/Type/:securityClass/Delete", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2385,7 +2385,7 @@ }, "get": { "description": "Get the specified managed device by its Entra ID Device ID.\n\nThis endpoint requires the `Device.Privileged.Read`, `Device.Privileged.ReadWrite`, `Device.Specialized.Read`, `Device.Specialized.ReadWrite`, `Device.Enterprise.ReadWrite`, `Device.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Device/:deviceId/Type/:securityClass/Get", + "operationId": "/Api/Defend/Device/:deviceId/Type/:securityClass/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2399,7 +2399,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ManagedDevice" + "$ref": "#/components/schemas/ManagedObject.Device" } } }, @@ -2421,10 +2421,10 @@ ] } }, - "/API/Defend/User/Type/{securityClass}/": { + "/Api/Defend/User/Type/{securityClass}/": { "get": { "description": "Returns a list of all devices managed or unmanaged.\n\nThis endpoint requires the `User.Privileged.Read`, `User.Privileged.ReadWrite`, `User.Specialized.Read`, `User.Specialized.ReadWrite`, `User.Enterprise.ReadWrite`, `User.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL. When reading the `unmanaged` objects, any security class permission can read them, no need for a specific `unmanaged` class assignment.", - "operationId": "/API/Defend/User/Type/:securityClass/Get", + "operationId": "/Api/Defend/User/Type/:securityClass/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2461,7 +2461,7 @@ }, "post": { "description": "For Specialized or Enterprise, adds existing user into management. For Privileged, securely clones the specified user's properties into a new managed user object in the privileged baselines.\n\nThis endpoint requires the `User.Privileged.ReadWrite`, `User.Specialized.ReadWrite`, `User.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/User/Type/:securityClass/Post", + "operationId": "/Api/Defend/User/Type/:securityClass/Post", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2498,7 +2498,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" } } }, @@ -2523,10 +2523,10 @@ ] } }, - "/API/Defend/User/{userId}/Type/{securityClass}/": { + "/Api/Defend/User/{userId}/Type/{securityClass}/": { "delete": { "description": "Deletes the user account and removes the management artifacts.\n\nThis endpoint requires the `User.Privileged.ReadWrite`, `User.Specialized.ReadWrite`, `User.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/User/:userId/Type/:securityClass/Delete", + "operationId": "/Api/Defend/User/:userId/Type/:securityClass/Delete", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2556,7 +2556,7 @@ }, "get": { "description": "Retrieves the specified managed user by its Entra ID User ID.\n\nThis endpoint requires the `User.Privileged.Read`, `User.Privileged.ReadWrite`, `User.Specialized.Read`, `User.Specialized.ReadWrite`, `User.Enterprise.ReadWrite`, `User.Enterprise.Read`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/User/:userId/Type/:securityClass/Get", + "operationId": "/Api/Defend/User/:userId/Type/:securityClass/Get", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2570,7 +2570,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ManagedUser" + "$ref": "#/components/schemas/ManagedObject.User" } } }, @@ -2592,10 +2592,10 @@ ] } }, - "/API/Defend/Marketplace/Type/{securityClass}/Offering/{offeringId}/": { + "/Api/Defend/Marketplace/Type/{securityClass}/Offering/{offeringId}/": { "post": { "description": "Creates the offering with the requested settings. In the body payload, the `type` property in the `property` object is ignored. See the AVD example.\n\nThis endpoint requires the `Intermediary.Privileged.ReadWrite`, `Intermediary.Specialized.ReadWrite`, `Intermediary.Enterprise.ReadWrite`, or the `Everything.ReadWrite` scope (permission). The security class parameter in the URL path corresponds to the same permission in the scope. That means if you are granted a privileged role, you can only call the privilege class URL.", - "operationId": "/API/Defend/Marketplace/Type/:securityClass/Offering/:offeringId/Post", + "operationId": "/Api/Defend/Marketplace/Type/:securityClass/Offering/:offeringId/Post", "parameters": [ { "$ref": "#/components/parameters/securityClass" @@ -2631,12 +2631,12 @@ "schema": { "allOf": [ { - "$ref": "#/components/schemas/Intermediary" + "$ref": "#/components/schemas/ManagedObject.Intermediary" }, { "properties": { "properties": { - "$ref": "#/components/schemas/Intermediary.AVD" + "$ref": "#/components/schemas/ManagedObject.AvdIntermediary" } }, "type": "object" @@ -2651,7 +2651,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Intermediary.AVD" + "$ref": "#/components/schemas/ManagedObject.AvdIntermediary" } } }, @@ -2697,12 +2697,8 @@ ], "servers": [ { - "description": "A secured connection to the app, only secured connections should be used for production.", - "url": "https://contoso.local:443/" - }, - { - "description": "Used only for local dev, never host this app without network encryption.", - "url": "http://contoso.local:80/" + "description": "The service", + "url": "/" } ], "tags": [ @@ -2747,4 +2743,4 @@ "name": "Debug Mode" } ] -} \ No newline at end of file +} diff --git a/src/dataGateway/TypeScript/LICENSE b/src/dataGateway/TypeScript/LICENSE new file mode 100644 index 0000000..918c40e --- /dev/null +++ b/src/dataGateway/TypeScript/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 SHI International Corp. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/dataGateway/TypeScript/README.md b/src/dataGateway/TypeScript/README.md new file mode 100644 index 0000000..5a8177e --- /dev/null +++ b/src/dataGateway/TypeScript/README.md @@ -0,0 +1,76 @@ +# SHI Data Gateway - TypeScript SDK + +This SDK provides a convenient TypeScript client for interacting with the SHI Data Gateway service. It is automatically generated from the OpenAPI specification located at [`Data-Gateway.json`](../../../specs/Data-Gateway.json) using [Kiota](https://github.com/microsoft/kiota). + +All typing data is included in the package. + +## Installation + +Install the SDK using npm: + +```bash +npm install @shi-corp/sdk-data-gateway +``` + +## Usage + +Here's a basic example of how to use the SDK: + +```TypeScript +import { DefaultAzureCredential } from '@azure/identity' +import { dataGatewayClientFactory } from '@shi-corp/sdk-data-gateway'; + +/** Authentication session used to authenticate to the SHI Data Gateway. */ +const credential = new DefaultAzureCredential(); + +/** Configured client for the data gateway that can make authenticated web requests against SDG. */ +const sdgClient = dataGatewayClientFactory(credential); + +/** Collection of correlation records representing the available list of license reports for the current authenticated tenant. */ +const results = await sdgClient.api.licenseReport.correlation.get(); + +// Loop through each available license report +for (const correlationRecord of results) { + // Do something here +} +``` + +## Project Structure + +- `bin/`: Compiled JavaScript files and type definitions. +- `sdk/`: Source TypeScript files generated by Kiota. + - `api/`: API endpoint definitions. + - `models/`: Data models used by the SDK. + +## Development + +### Prerequisites + +- [Node.js](https://nodejs.org/) - Latest LTS version +- [Kiota](https://github.com/microsoft/kiota) + +### Generating the SDK + +To regenerate the SDK from the OpenAPI specification, run: + +```bash +npm run generate:Sdk +``` + +### Building the SDK + +To build the SDK for production, run: + +```bash +npm run build:Prod +``` + +## License + +This SDK is licensed under the [MIT License](./LICENSE). + +## Support + +For issues or feature requests, please visit the [GitHub Issues page](https://github.com/Software-Hardware-Integration-Lab/OpenAPI/issues). + +For more information, visit the [official documentation](https://docs.shilab.com). diff --git a/src/dataGateway/TypeScript/index.ts b/src/dataGateway/TypeScript/index.ts new file mode 100644 index 0000000..244c58d --- /dev/null +++ b/src/dataGateway/TypeScript/index.ts @@ -0,0 +1,23 @@ +import type { TokenCredential } from "@azure/core-auth"; +import { AzureIdentityAuthenticationProvider } from "@microsoft/kiota-authentication-azure"; +import { FetchRequestAdapter } from "@microsoft/kiota-http-fetchlibrary"; +import { createDataGatewayClient } from "./sdk/dataGatewayClient.js"; + +/** + * Function that initializes the Data Gateway SDK. + * @param credential Configured authentication session. + * @returns Configured API client that is able to make requests against SHI Data Gateway. + */ +export function dataGatewayClientFactory(credential: TokenCredential) { + /** List of hosts that are allowed when making API calls, this is used to prevent token leaks to threat actors. */ + const allowedHostList = new Set(['https://api.shilab.com']); + + /** Authentication system that will be used to configure the SDK client. */ + const authProvider = new AzureIdentityAuthenticationProvider(credential, void 0, void 0, allowedHostList); + + /** Instance of the data gateway client initialization configuration. */ + const dataGatewayAdapter = new FetchRequestAdapter(authProvider); + + /** Instance of the API client that can be used for data gateway access. */ + return createDataGatewayClient(dataGatewayAdapter); +} diff --git a/src/dataGateway/TypeScript/package-lock.json b/src/dataGateway/TypeScript/package-lock.json new file mode 100644 index 0000000..7f3be06 --- /dev/null +++ b/src/dataGateway/TypeScript/package-lock.json @@ -0,0 +1,1145 @@ +{ + "name": "@shi-corp/sdk-data-gateway", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@shi-corp/sdk-data-gateway", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-authentication-azure": "~1.0.0-preview.92", + "@microsoft/kiota-bundle": "~1.0.0-preview.92", + "typia": "~8.1.0" + }, + "devDependencies": { + "@azure/core-auth": "~1.9.0", + "@types/node": "~22.13.14", + "ts-patch": "~3.3.0", + "typescript": "~5.8.2" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@microsoft/kiota-abstractions": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-abstractions/-/kiota-abstractions-1.0.0-preview.92.tgz", + "integrity": "sha512-B0w9MJBaK/enLeXQR479YNx6uHs1I6Gfu3OszmI2JbRCfS6ON1oyAB6cWTK2cB1sUD8C3vHR3TgtQfZG2pC5Og==", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.7.0", + "@std-uritemplate/std-uritemplate": "^2.0.0", + "tinyduration": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-authentication-azure": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-authentication-azure/-/kiota-authentication-azure-1.0.0-preview.92.tgz", + "integrity": "sha512-Hif7sfkdVE+gMpvAVeG5fCRUcNp6n+XYWIxu18ewzV1UMn9qygpIFVepcVnG7lAdetBvtddlGiAnwTFSqdSJdQ==", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.5.0", + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@opentelemetry/api": "^1.7.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-bundle": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-bundle/-/kiota-bundle-1.0.0-preview.92.tgz", + "integrity": "sha512-BZI+gF05xMmY32oTLBbBO8vM7Zy/26dSaAqPnoxEJQombjB2LmxS/fnEhc84pHoeOsMKTFOTr9DpOzRJglhNsQ==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@microsoft/kiota-http-fetchlibrary": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-form": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-json": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-multipart": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-text": "^1.0.0-preview.92" + } + }, + "node_modules/@microsoft/kiota-http-fetchlibrary": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-http-fetchlibrary/-/kiota-http-fetchlibrary-1.0.0-preview.92.tgz", + "integrity": "sha512-EyU7hUOuDGyCrNeJ9qR9GkE7iEq54RkQ1vdbXxbOZdPogjQcNbZm6Pb5/yDiPwwMIuS3LXvVVVY3jJQwfXQtOA==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@opentelemetry/api": "^1.7.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-form": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-form/-/kiota-serialization-form-1.0.0-preview.92.tgz", + "integrity": "sha512-fW7gZOnld8a+nz6mJhWbCSC96XiTxD4nGnHYi1SmvK1uK2n74taCZ6g957Fitj+60nVQAFNJmHtvqd633y4XXg==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-json": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-json/-/kiota-serialization-json-1.0.0-preview.92.tgz", + "integrity": "sha512-3wb08c2hnBQRmxJ6RFtiGbYEk1spWyzqKenXM1Agtg3XM3MSnpxwxXWfHFvmBGKG2TTxGWaOCCsQsiJmHiI4vA==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-multipart": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-multipart/-/kiota-serialization-multipart-1.0.0-preview.92.tgz", + "integrity": "sha512-koIIAOX6gOP3vHA8s4HSq1T8CW8H5DM8+zgImI7887EDSUqo0rSFSWCVsIyQaQSgaFosxhYrdRkBrJGG2cndDw==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-text": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-text/-/kiota-serialization-text-1.0.0-preview.92.tgz", + "integrity": "sha512-1FHYgw0ZyQX6Tv0Y5JmES1j+D8Tlk5r01xtq37zoAr7RcfEzoWzV9fvYhCXbleKbofE+ozJ70tp0667UdLkAKQ==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@samchon/openapi": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@samchon/openapi/-/openapi-3.2.2.tgz", + "integrity": "sha512-ij6qrXDj+uF2Jvz/DPAAQ929QGxAF0dYBL4b+41Y2iogZ8YUR/us9lklFmHYxYKWr450TShWDMCu0jSywUsITQ==", + "license": "MIT" + }, + "node_modules/@std-uritemplate/std-uritemplate": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@std-uritemplate/std-uritemplate/-/std-uritemplate-2.0.3.tgz", + "integrity": "sha512-oN5BHB81TMdasLZLkcdmVDFajo3CxrdeYWFKbeVw1MVZcd4jWZX6cbxm0Iq91wt/o2zsJjmefUaYrLInvZ3/DQ==", + "license": "Apache-2.0" + }, + "node_modules/@types/node": { + "version": "22.13.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "license": "MIT", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinyduration": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tinyduration/-/tinyduration-3.4.1.tgz", + "integrity": "sha512-NemFoamVYn7TmtwZKZ3OiliM9fZkr6EWiTM+wKknco6POSy2gS689xx/pXip0JYp40HXpUw6k65CUYHWYUXdaA==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ts-patch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.3.0.tgz", + "integrity": "sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "global-prefix": "^4.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.6.3", + "strip-ansi": "^6.0.1" + }, + "bin": { + "ts-patch": "bin/ts-patch.js", + "tspc": "bin/tspc.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typia": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/typia/-/typia-8.1.0.tgz", + "integrity": "sha512-CEP1/vTeU70lEtyoEhJv9NX2pyY+fFZE8Yy0ONDhTS9cREYchZqcpISncjAsuSFH4QH+hu9vkfnOVJTtEMpqLA==", + "license": "MIT", + "dependencies": { + "@samchon/openapi": "^3.2.2", + "commander": "^10.0.0", + "comment-json": "^4.2.3", + "inquirer": "^8.2.5", + "package-manager-detector": "^0.2.0", + "randexp": "^0.5.3" + }, + "bin": { + "typia": "lib/executable/typia.js" + }, + "peerDependencies": { + "@samchon/openapi": ">=3.2.2 <4.0.0", + "typescript": ">=4.8.0 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/src/dataGateway/TypeScript/package.json b/src/dataGateway/TypeScript/package.json new file mode 100644 index 0000000..6296b79 --- /dev/null +++ b/src/dataGateway/TypeScript/package.json @@ -0,0 +1,38 @@ +{ + "name": "@shi-corp/sdk-data-gateway", + "version": "1.0.0", + "type": "module", + "main": "index.js", + "description": "SDK client used to interface with the SHI Data Gateway service.", + "keywords": [ + "OpenAPI", + "Data Gateway", + "SDK" + ], + "homepage": "https://docs.shilab.com/", + "bugs": { + "url": "https://github.com/Software-Hardware-Integration-Lab/OpenAPI/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/Software-Hardware-Integration-Lab/OpenAPI" + }, + "license": "MIT", + "author": "Elliot Huffman (elliot_huffman@shi.com)", + "scripts": { + "generate:Sdk": "kiota generate -l typescript -d ../../../specs/Data-Gateway.json -c DataGatewayClient -o ./sdk/ --exclude-backward-compatible", + "build:Prod": "tsc --sourceMap false", + "prepare": "ts-patch install" + }, + "devDependencies": { + "@azure/core-auth": "~1.9.0", + "@types/node": "~22.13.14", + "ts-patch": "~3.3.0", + "typescript": "~5.8.2" + }, + "dependencies": { + "@microsoft/kiota-authentication-azure": "~1.0.0-preview.92", + "@microsoft/kiota-bundle": "~1.0.0-preview.92", + "typia": "~8.1.0" + } +} diff --git a/src/dataGateway/TypeScript/tsconfig.json b/src/dataGateway/TypeScript/tsconfig.json new file mode 100644 index 0000000..f0c9486 --- /dev/null +++ b/src/dataGateway/TypeScript/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "noImplicitAny": false, + "outDir": "./bin", + "plugins": [ + { + "transform": "typia/lib/transform" + } + ] + }, + "extends": "../../../tsconfig.base.json", + "include": [ + "./**/*" + ] +} diff --git a/src/shield/TypeScript/LICENSE b/src/shield/TypeScript/LICENSE new file mode 100644 index 0000000..918c40e --- /dev/null +++ b/src/shield/TypeScript/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 SHI International Corp. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/shield/TypeScript/README.md b/src/shield/TypeScript/README.md new file mode 100644 index 0000000..11aff4f --- /dev/null +++ b/src/shield/TypeScript/README.md @@ -0,0 +1,79 @@ +# SHI Data Gateway - TypeScript SDK + +This SDK provides a convenient TypeScript client for interacting with the SHI SHIELD service. It is automatically generated from the OpenAPI specification located at [`SHIELD.json`](../../../specs/SHIELD.json) using [Kiota](https://github.com/microsoft/kiota). + +All typing data is included in the package. + +## Installation + +Install the SDK using npm: + +```bash +npm install @shi-corp/sdk-shield +``` + +## Usage + +Here's a basic example of how to use the SDK: + +```TypeScript +import { DefaultAzureCredential } from '@azure/identity' +import { shieldClientFactory } from '@shi-corp/sdk-shield'; + +/** Authentication session used to authenticate to the SHI Data Gateway. */ +const credential = new DefaultAzureCredential(); + +/** Base URL for your SHIELD instance. No protocol specifier or trailing slash! */ +const baseUrl = 'shield.example.com'; + +/** Configured client for the data gateway that can make authenticated web requests against SDG. */ +const shieldClient = shieldClientFactory(credential, baseUrl); + +/** Flag that indicates if discover is currently running (`true`) or not (`false`). */ +const results = await shieldClient.api.discover.status.get(); + +// Check if discover is currently running +if (results?.running === true) { + // Do something +} +``` + +## Project Structure + +- `bin/`: Compiled JavaScript files and type definitions. +- `sdk/`: Source TypeScript files generated by Kiota. + - `api/`: API endpoint definitions. + - `models/`: Data models used by the SDK. + +## Development + +### Prerequisites + +- [Node.js](https://nodejs.org/) - Latest LTS version +- [Kiota](https://github.com/microsoft/kiota) + +### Generating the SDK + +To regenerate the SDK from the OpenAPI specification, run: + +```bash +npm run generate:Sdk +``` + +### Building the SDK + +To build the SDK for production, run: + +```bash +npm run build:Prod +``` + +## License + +This SDK is licensed under the [MIT License](./LICENSE). + +## Support + +For issues or feature requests, please visit the [GitHub Issues page](https://github.com/Software-Hardware-Integration-Lab/OpenAPI/issues). + +For more information, visit the [official documentation](https://docs.shilab.com). diff --git a/src/shield/TypeScript/index.ts b/src/shield/TypeScript/index.ts new file mode 100644 index 0000000..d8ca3fa --- /dev/null +++ b/src/shield/TypeScript/index.ts @@ -0,0 +1,33 @@ +import type { TokenCredential } from "@azure/core-auth"; +import { AzureIdentityAuthenticationProvider } from "@microsoft/kiota-authentication-azure"; +import { FetchRequestAdapter } from "@microsoft/kiota-http-fetchlibrary"; +import { createShieldClient } from "./sdk/shieldClient.js"; +import { assert, assertGuardEquals, tags } from 'typia'; + +/** + * Function that initializes the SHIELD SDK. + * @param credential Configured authentication session from Entra ID. + * @returns Configured API client that is able to make requests against the specified SHIELD instance. + */ +export function shieldClientFactory(credential: TokenCredential, baseUrl: string & tags.Format<'hostname'>) { + // #region Input Validation + assert(credential); + + assertGuardEquals(baseUrl); + // #endregion Input Validation + + /** List of hosts that are allowed when making API calls, this is used to prevent token leaks to threat actors. */ + const allowedHostList = new Set([baseUrl]); + + /** Authentication system that will be used to configure the SDK client. */ + const authProvider = new AzureIdentityAuthenticationProvider(credential, void 0, void 0, allowedHostList); + + /** Instance of the SHIELD SDK client initialization configuration. */ + const shieldAdapter = new FetchRequestAdapter(authProvider); + + // Set the base URL to be what is provided, since the host name is unique every deployment + shieldAdapter.baseUrl = `https://${ baseUrl }`; + + /** Instance of the API client that can be used for SHIELD access. */ + return createShieldClient(shieldAdapter); +} diff --git a/src/shield/TypeScript/package-lock.json b/src/shield/TypeScript/package-lock.json new file mode 100644 index 0000000..fc99a41 --- /dev/null +++ b/src/shield/TypeScript/package-lock.json @@ -0,0 +1,1145 @@ +{ + "name": "sdk-shield", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sdk-shield", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-authentication-azure": "~1.0.0-preview.92", + "@microsoft/kiota-bundle": "~1.0.0-preview.92", + "typia": "~8.1.0" + }, + "devDependencies": { + "@azure/core-auth": "~1.9.0", + "@types/node": "~22.13.14", + "ts-patch": "~3.3.0", + "typescript": "~5.8.2" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@microsoft/kiota-abstractions": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-abstractions/-/kiota-abstractions-1.0.0-preview.92.tgz", + "integrity": "sha512-B0w9MJBaK/enLeXQR479YNx6uHs1I6Gfu3OszmI2JbRCfS6ON1oyAB6cWTK2cB1sUD8C3vHR3TgtQfZG2pC5Og==", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.7.0", + "@std-uritemplate/std-uritemplate": "^2.0.0", + "tinyduration": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-authentication-azure": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-authentication-azure/-/kiota-authentication-azure-1.0.0-preview.92.tgz", + "integrity": "sha512-Hif7sfkdVE+gMpvAVeG5fCRUcNp6n+XYWIxu18ewzV1UMn9qygpIFVepcVnG7lAdetBvtddlGiAnwTFSqdSJdQ==", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.5.0", + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@opentelemetry/api": "^1.7.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-bundle": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-bundle/-/kiota-bundle-1.0.0-preview.92.tgz", + "integrity": "sha512-BZI+gF05xMmY32oTLBbBO8vM7Zy/26dSaAqPnoxEJQombjB2LmxS/fnEhc84pHoeOsMKTFOTr9DpOzRJglhNsQ==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@microsoft/kiota-http-fetchlibrary": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-form": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-json": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-multipart": "^1.0.0-preview.92", + "@microsoft/kiota-serialization-text": "^1.0.0-preview.92" + } + }, + "node_modules/@microsoft/kiota-http-fetchlibrary": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-http-fetchlibrary/-/kiota-http-fetchlibrary-1.0.0-preview.92.tgz", + "integrity": "sha512-EyU7hUOuDGyCrNeJ9qR9GkE7iEq54RkQ1vdbXxbOZdPogjQcNbZm6Pb5/yDiPwwMIuS3LXvVVVY3jJQwfXQtOA==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "@opentelemetry/api": "^1.7.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-form": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-form/-/kiota-serialization-form-1.0.0-preview.92.tgz", + "integrity": "sha512-fW7gZOnld8a+nz6mJhWbCSC96XiTxD4nGnHYi1SmvK1uK2n74taCZ6g957Fitj+60nVQAFNJmHtvqd633y4XXg==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-json": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-json/-/kiota-serialization-json-1.0.0-preview.92.tgz", + "integrity": "sha512-3wb08c2hnBQRmxJ6RFtiGbYEk1spWyzqKenXM1Agtg3XM3MSnpxwxXWfHFvmBGKG2TTxGWaOCCsQsiJmHiI4vA==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-multipart": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-multipart/-/kiota-serialization-multipart-1.0.0-preview.92.tgz", + "integrity": "sha512-koIIAOX6gOP3vHA8s4HSq1T8CW8H5DM8+zgImI7887EDSUqo0rSFSWCVsIyQaQSgaFosxhYrdRkBrJGG2cndDw==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@microsoft/kiota-serialization-text": { + "version": "1.0.0-preview.92", + "resolved": "https://registry.npmjs.org/@microsoft/kiota-serialization-text/-/kiota-serialization-text-1.0.0-preview.92.tgz", + "integrity": "sha512-1FHYgw0ZyQX6Tv0Y5JmES1j+D8Tlk5r01xtq37zoAr7RcfEzoWzV9fvYhCXbleKbofE+ozJ70tp0667UdLkAKQ==", + "license": "MIT", + "dependencies": { + "@microsoft/kiota-abstractions": "^1.0.0-preview.92", + "tslib": "^2.6.2" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@samchon/openapi": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@samchon/openapi/-/openapi-3.2.2.tgz", + "integrity": "sha512-ij6qrXDj+uF2Jvz/DPAAQ929QGxAF0dYBL4b+41Y2iogZ8YUR/us9lklFmHYxYKWr450TShWDMCu0jSywUsITQ==", + "license": "MIT" + }, + "node_modules/@std-uritemplate/std-uritemplate": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@std-uritemplate/std-uritemplate/-/std-uritemplate-2.0.3.tgz", + "integrity": "sha512-oN5BHB81TMdasLZLkcdmVDFajo3CxrdeYWFKbeVw1MVZcd4jWZX6cbxm0Iq91wt/o2zsJjmefUaYrLInvZ3/DQ==", + "license": "Apache-2.0" + }, + "node_modules/@types/node": { + "version": "22.13.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "license": "MIT", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinyduration": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tinyduration/-/tinyduration-3.4.1.tgz", + "integrity": "sha512-NemFoamVYn7TmtwZKZ3OiliM9fZkr6EWiTM+wKknco6POSy2gS689xx/pXip0JYp40HXpUw6k65CUYHWYUXdaA==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ts-patch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.3.0.tgz", + "integrity": "sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "global-prefix": "^4.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.6.3", + "strip-ansi": "^6.0.1" + }, + "bin": { + "ts-patch": "bin/ts-patch.js", + "tspc": "bin/tspc.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typia": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/typia/-/typia-8.1.0.tgz", + "integrity": "sha512-CEP1/vTeU70lEtyoEhJv9NX2pyY+fFZE8Yy0ONDhTS9cREYchZqcpISncjAsuSFH4QH+hu9vkfnOVJTtEMpqLA==", + "license": "MIT", + "dependencies": { + "@samchon/openapi": "^3.2.2", + "commander": "^10.0.0", + "comment-json": "^4.2.3", + "inquirer": "^8.2.5", + "package-manager-detector": "^0.2.0", + "randexp": "^0.5.3" + }, + "bin": { + "typia": "lib/executable/typia.js" + }, + "peerDependencies": { + "@samchon/openapi": ">=3.2.2 <4.0.0", + "typescript": ">=4.8.0 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/src/shield/TypeScript/package.json b/src/shield/TypeScript/package.json new file mode 100644 index 0000000..681f81c --- /dev/null +++ b/src/shield/TypeScript/package.json @@ -0,0 +1,39 @@ +{ + "name": "@shi-corp/sdk-shield", + "version": "1.0.0", + "type": "module", + "main": "index.js", + "description": "SDK client used to interface with the SHI Data Gateway service.", + "keywords": [ + "OpenAPI", + "SHIELD", + "SDK" + ], + "homepage": "https://github.com/Software-Hardware-Integration-Lab/OpenAPI#readme", + "bugs": { + "url": "https://github.com/Software-Hardware-Integration-Lab/OpenAPI/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Software-Hardware-Integration-Lab/OpenAPI.git" + }, + "license": "MIT", + "author": "Elliot Huffman (elliot_huffman@shi.com)", + "scripts": { + "build:Dev": "tsc", + "build:Prod": "tsc --sourceMap false", + "generate:Sdk": "kiota generate -l typescript -d ../../../specs/SHIELD.json -c ShieldClient -o ./sdk/ --exclude-backward-compatible", + "prepare": "ts-patch install" + }, + "devDependencies": { + "@azure/core-auth": "~1.9.0", + "@types/node": "~22.13.14", + "ts-patch": "~3.3.0", + "typescript": "~5.8.2" + }, + "dependencies": { + "@microsoft/kiota-authentication-azure": "~1.0.0-preview.92", + "@microsoft/kiota-bundle": "~1.0.0-preview.92", + "typia": "~8.1.0" + } +} diff --git a/src/shield/TypeScript/tsconfig.json b/src/shield/TypeScript/tsconfig.json new file mode 100644 index 0000000..d7602e0 --- /dev/null +++ b/src/shield/TypeScript/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "noImplicitAny": false, + "plugins": [ + { + "transform": "typia/lib/transform" + } + ] + }, + "extends": "../../../tsconfig.base.json", + "include": [ + "./**/*" + ] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..5934860 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,105 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Language and Environment */ + "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "libReplacement": true, /* Enable lib replacement. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + /* Modules */ + "module": "NodeNext", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "NodeNext", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./bin", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}