diff --git a/.betterer.results b/.betterer.results index e267d67..5f9877b 100644 --- a/.betterer.results +++ b/.betterer.results @@ -250,19 +250,6 @@ exports[`No explicit any in server`] = { [65, 60, 3, "Unexpected any. Specify a different type.", "193409811"], [93, 58, 3, "Unexpected any. Specify a different type.", "193409811"] ], - "server/plugins/analytics/adapters/SnowflakeAnalyticsAdapter.ts:2349964782": [ - [20, 16, 3, "Unexpected any. Specify a different type.", "193409811"], - [31, 40, 3, "Unexpected any. Specify a different type.", "193409811"], - [32, 30, 3, "Unexpected any. Specify a different type.", "193409811"], - [36, 36, 3, "Unexpected any. Specify a different type.", "193409811"], - [44, 34, 3, "Unexpected any. Specify a different type.", "193409811"], - [45, 49, 3, "Unexpected any. Specify a different type.", "193409811"], - [127, 36, 3, "Unexpected any. Specify a different type.", "193409811"], - [133, 41, 3, "Unexpected any. Specify a different type.", "193409811"], - [181, 47, 3, "Unexpected any. Specify a different type.", "193409811"], - [202, 32, 3, "Unexpected any. Specify a different type.", "193409811"], - [202, 38, 3, "Unexpected any. Specify a different type.", "193409811"] - ], "server/routes/policies/PoliciesRoutes.ts:1959143587": [ [14, 6, 3, "Unexpected any. Specify a different type.", "193409811"] ], @@ -324,15 +311,6 @@ exports[`No explicit any in server`] = { "server/services/userStatisticsService/userStatisticsService.test.ts:73360957": [ [43, 45, 3, "Unexpected any. Specify a different type.", "193409811"] ], - "server/snowflake/KyselyDialect.mock.ts:2540496454": [ - [6, 69, 3, "Unexpected any. Specify a different type.", "193409811"] - ], - "server/snowflake/handleTableChanges.test.ts:497427792": [ - [18, 34, 3, "Unexpected any. Specify a different type.", "193409811"] - ], - "server/snowflake/handleTableChanges.ts:326808195": [ - [138, 53, 3, "Unexpected any. Specify a different type.", "193409811"] - ], "server/storage/dataWarehouse/ClickhouseAdapter.ts:2426172355": [ [94, 34, 3, "Unexpected any. Specify a different type.", "193409811"] ], diff --git a/.devops/aws/README.md b/.devops/aws/README.md index ad6813d..60375da 100644 --- a/.devops/aws/README.md +++ b/.devops/aws/README.md @@ -10,7 +10,7 @@ This CDK application defined the complete AWS infrastructure for the application - **VPC and Networking**: Multi-AZ VPC setup with public/private subnets - **Kubernetes (EKS)**: Managed Kubernetes clusters for running the API and workers -- **Databases**: RDS PostgreSQL, Redis, ScyllaDB, and Snowflake integrations +- **Databases**: RDS PostgreSQL, Redis, and ScyllaDB - **API Gateway**: REST API with rate limiting and usage plans - **CloudFront**: CDN for static assets and API caching - **Monitoring**: Datadog integration and CloudWatch alarms diff --git a/.devops/aws/package-lock.json b/.devops/aws/package-lock.json index 5dc5453..8ed8fa2 100644 --- a/.devops/aws/package-lock.json +++ b/.devops/aws/package-lock.json @@ -1,7 +1,7 @@ { "name": "coop-cdk", "version": "0.1.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -37,56 +37,21 @@ "typescript": "^5.5.2" } }, - "../migrator": { - "name": "coop-data-migrator", - "version": "1.0.0", - "extraneous": true, - "license": "ISC", - "dependencies": { - "@aws-sdk/client-rds": "^3.49.0", - "@roostorg/db-migrator": "^1.0.5", - "@types/glob": "^7.2.0", - "@types/umzug": "^2.3.3", - "aws-sdk": "^2.1066.0", - "cassandra-driver": "^4.6.4", - "csv-parse": "^5.0.4", - "glob": "^7.2.0", - "kysely": "^0.26.1", - "latlon-geohash": "^1.1.0", - "lodash": "^4.17.21", - "pg": "^8.7.1", - "sequelize": "^6.32.1", - "snowflake-sdk": "^1.6.8", - "ts-node": "^10.9.2", - "uid": "^2.0.0", - "umzug": "^3.0.0", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@types/pg": "^8.10.2", - "dotenv": "^16.0.0", - "typescript": "^5.2.2" - } - }, "node_modules/@aws-cdk/asset-awscli-v1": { "version": "2.2.212", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.212.tgz", - "integrity": "sha512-7WqbnWUkBBcAzEdfRrpz6sCOheUPf4JEUdGvzJ4EEufXeT7v7nRbRmTvUBbQ+OQlCv9UrVj9XuFxKPjkvneGMQ==" + "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-kubectl-v20": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", - "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" + "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", - "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" + "license": "Apache-2.0" }, "node_modules/@aws-cdk/aws-sagemaker-alpha": { "version": "2.147.0-alpha.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker-alpha/-/aws-sagemaker-alpha-2.147.0-alpha.0.tgz", - "integrity": "sha512-sykKNgArb9rzGx+2dJ1WF2lwS8AYrKuLc6PWzYosUsL8n86V0dnBP6X8hRItcTQiiROu3bN9zVJtwJxJZg+NTg==", + "license": "Apache-2.0", "engines": { "node": ">= 14.15.0" }, @@ -97,12 +62,11 @@ }, "node_modules/@aws-cdk/cloud-assembly-schema": { "version": "38.0.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz", - "integrity": "sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==", "bundleDependencies": [ "jsonschema", "semver" ], + "license": "Apache-2.0", "dependencies": { "jsonschema": "^1.4.1", "semver": "^7.6.3" @@ -129,8 +93,7 @@ }, "node_modules/@aws-cdk/lambda-layer-kubectl-v29": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v29/-/lambda-layer-kubectl-v29-2.1.1.tgz", - "integrity": "sha512-6CChfYXbV8jDIEhUrF2oxXUJPYjXRjt4d6D3Tck9z9wd1jN17juOHTetompVJCDYWfqrXYWT2gK8PEc9pqJojg==", + "license": "Apache-2.0", "peerDependencies": { "aws-cdk-lib": "^2.94.0", "constructs": "^10.0.5" @@ -138,8 +101,7 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -152,8 +114,7 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -163,8 +124,7 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -175,8 +135,7 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -187,8 +146,7 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -200,16 +158,14 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -218,8 +174,7 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -229,8 +184,7 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -241,8 +195,7 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -253,9 +206,8 @@ }, "node_modules/@aws-sdk/client-elastic-load-balancing-v2": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elastic-load-balancing-v2/-/client-elastic-load-balancing-v2-3.632.0.tgz", - "integrity": "sha512-VcF+eYp3UReSBSnFTlprCZtPMcRj1PaZCdt6xibS0+BZG0/zA4u0IW7iOL2jvTLliyCbh6vA1frZb+3RSR+FWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -306,9 +258,8 @@ }, "node_modules/@aws-sdk/client-resource-groups-tagging-api": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-resource-groups-tagging-api/-/client-resource-groups-tagging-api-3.632.0.tgz", - "integrity": "sha512-0YE+5GayFzvgsgwRKdwZPujVG8YfSIkCrM7DYQxK7Ct9BZWvbPbeAcgAxpdhnpSqwdh7AlcWSfyEP3g+vYQvqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -358,8 +309,7 @@ }, "node_modules/@aws-sdk/client-secrets-manager": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.632.0.tgz", - "integrity": "sha512-WsQhPHHK1yPfALcP1B7nBSGDzky6vFTUEXnUdfzb5Xy2cT+JTBTS6ChtQGqqOuGHDP/3t/9soqZ+L6rUCYBb/Q==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -410,8 +360,7 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.632.0.tgz", - "integrity": "sha512-iYWHiKBz44m3chCFvtvHnvCpL2rALzyr1e6tOZV3dLlOKtQtDUlPy6OtnXDu4y+wyJCniy8ivG3+LAe4klzn1Q==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -458,8 +407,7 @@ }, "node_modules/@aws-sdk/client-sso-oidc": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.632.0.tgz", - "integrity": "sha512-Oh1fIWaoZluihOCb/zDEpRTi+6an82fgJz7fyRBugyLhEtDjmvpCQ3oKjzaOhoN+4EvXAm1ZS/ZgpvXBlIRTgw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -510,8 +458,7 @@ }, "node_modules/@aws-sdk/client-sts": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.632.0.tgz", - "integrity": "sha512-Ss5cBH09icpTvT+jtGGuQlRdwtO7RyE9BF4ZV/CEPATdd9whtJt4Qxdya8BUnkWR7h5HHTrQHqai3YVYjku41A==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -560,8 +507,7 @@ }, "node_modules/@aws-sdk/core": { "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz", - "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^2.3.2", "@smithy/node-config-provider": "^3.1.4", @@ -580,8 +526,7 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -594,8 +539,7 @@ }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.622.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", - "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/fetch-http-handler": "^3.2.4", @@ -613,8 +557,7 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.632.0.tgz", - "integrity": "sha512-m6epoW41xa1ajU5OiHcmQHoGVtrbXBaRBOUhlCLZmcaqMLYsboM4iD/WZP8aatKEON5tTnVXh/4StV8D/+wemw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.620.1", "@aws-sdk/credential-provider-http": "3.622.0", @@ -637,8 +580,7 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.632.0.tgz", - "integrity": "sha512-cL8fuJWm/xQBO4XJPkeuZzl3XinIn9EExWgzpG48NRMKR5us1RI/ucv7xFbBBaG+r/sDR2HpYBIA3lVIpm1H3Q==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.620.1", "@aws-sdk/credential-provider-http": "3.622.0", @@ -659,8 +601,7 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -674,8 +615,7 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.632.0.tgz", - "integrity": "sha512-P/4wB6j7ym5QCPTL2xlMfvf2NcXSh+z0jmsZP4WW/tVwab4hvgabPPbLeEZDSWZ0BpgtxKGvRq0GSHuGeirQbA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.632.0", "@aws-sdk/token-providers": "3.614.0", @@ -691,8 +631,7 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -708,8 +647,7 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/protocol-http": "^4.1.0", @@ -722,8 +660,7 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", @@ -735,8 +672,7 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/protocol-http": "^4.1.0", @@ -749,8 +685,7 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz", - "integrity": "sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.632.0", @@ -764,8 +699,7 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/node-config-provider": "^3.1.4", @@ -780,8 +714,7 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -798,8 +731,7 @@ }, "node_modules/@aws-sdk/types": { "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -810,8 +742,7 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz", - "integrity": "sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", @@ -824,8 +755,7 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -835,8 +765,7 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", @@ -846,8 +775,7 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/node-config-provider": "^3.1.4", @@ -868,9 +796,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -880,9 +807,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -896,6 +822,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -912,6 +839,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -928,6 +856,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -938,12 +867,11 @@ }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", - "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -960,6 +888,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -976,6 +905,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -992,6 +922,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -1008,6 +939,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1024,6 +956,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1040,6 +973,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1056,6 +990,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1072,6 +1007,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1088,6 +1024,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1104,6 +1041,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1120,6 +1058,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1136,6 +1075,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -1152,6 +1092,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -1168,6 +1109,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -1184,6 +1126,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -1200,6 +1143,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1216,6 +1160,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1232,6 +1177,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1242,14 +1188,12 @@ }, "node_modules/@ethanresnick/match": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@ethanresnick/match/-/match-0.0.4.tgz", - "integrity": "sha512-xTGcxVU8FqKcZCMbKZHVDW3Wcqw49BMQAsNViILyWHvq+BCk4uUb3lenF3gQBp/AwuJEdQbKV1SfoGS7A1cOHA==" + "license": "ISC" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1264,9 +1208,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1276,9 +1219,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1288,15 +1230,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1311,9 +1251,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1326,9 +1265,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1343,9 +1281,8 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.4" }, @@ -1355,9 +1292,8 @@ }, "node_modules/@jest/types": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -1371,23 +1307,20 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jsii/check-node": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.102.0.tgz", - "integrity": "sha512-uyKjxCe1ou11RJz6koBr5vXtyaGjTA45hF+H88GNW96vms7jKqmYdMm067Az1OKwl38h02lQRQ2tmoEzV7u74w==", + "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.2", "semver": "^7.6.3" @@ -1398,8 +1331,7 @@ }, "node_modules/@jsii/spec": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/@jsii/spec/-/spec-1.102.0.tgz", - "integrity": "sha512-/VcmoEyp7HR0xoFz47/fiyZjAv+0gHG4ZwTbgB+umbB88bTbLZadnqBL7T9OIKQbK4w8HNOaRnHwjNBIYIPxWQ==", + "license": "Apache-2.0", "dependencies": { "ajv": "^8.17.1" }, @@ -1409,9 +1341,8 @@ }, "node_modules/@kubernetes/client-node": { "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.21.0.tgz", - "integrity": "sha512-yYRbgMeyQbvZDHt/ZqsW3m4lRefzhbbJEuj8sVXM+bufKrgmzriA2oq7lWPH/k/LQIicAME9ixPUadTrxIF6dQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/js-yaml": "^4.0.1", "@types/node": "^20.1.1", @@ -1434,17 +1365,15 @@ }, "node_modules/@kubernetes/client-node/node_modules/@types/node": { "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1455,16 +1384,14 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1475,9 +1402,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1485,8 +1411,7 @@ }, "node_modules/@smithy/abort-controller": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1497,8 +1422,7 @@ }, "node_modules/@smithy/config-resolver": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", @@ -1512,8 +1436,7 @@ }, "node_modules/@smithy/core": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", - "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.0", "@smithy/middleware-retry": "^3.0.14", @@ -1530,8 +1453,7 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/property-provider": "^3.1.3", @@ -1545,8 +1467,7 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.0", "@smithy/querystring-builder": "^3.0.3", @@ -1557,8 +1478,7 @@ }, "node_modules/@smithy/hash-node": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "@smithy/util-buffer-from": "^3.0.0", @@ -1571,8 +1491,7 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1580,8 +1499,7 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1591,8 +1509,7 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", @@ -1604,8 +1521,7 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", @@ -1621,8 +1537,7 @@ }, "node_modules/@smithy/middleware-retry": { "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", - "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/protocol-http": "^4.1.0", @@ -1640,8 +1555,7 @@ }, "node_modules/@smithy/middleware-serde": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1652,8 +1566,7 @@ }, "node_modules/@smithy/middleware-stack": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1664,8 +1577,7 @@ }, "node_modules/@smithy/node-config-provider": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.3", "@smithy/shared-ini-file-loader": "^3.1.4", @@ -1678,8 +1590,7 @@ }, "node_modules/@smithy/node-http-handler": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.1", "@smithy/protocol-http": "^4.1.0", @@ -1693,8 +1604,7 @@ }, "node_modules/@smithy/property-provider": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1705,8 +1615,7 @@ }, "node_modules/@smithy/protocol-http": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1717,8 +1626,7 @@ }, "node_modules/@smithy/querystring-builder": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "@smithy/util-uri-escape": "^3.0.0", @@ -1730,8 +1638,7 @@ }, "node_modules/@smithy/querystring-parser": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1742,8 +1649,7 @@ }, "node_modules/@smithy/service-error-classification": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0" }, @@ -1753,8 +1659,7 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1765,8 +1670,7 @@ }, "node_modules/@smithy/signature-v4": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.0", @@ -1783,8 +1687,7 @@ }, "node_modules/@smithy/smithy-client": { "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", - "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.0", "@smithy/middleware-stack": "^3.0.3", @@ -1799,8 +1702,7 @@ }, "node_modules/@smithy/types": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1810,8 +1712,7 @@ }, "node_modules/@smithy/url-parser": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^3.0.3", "@smithy/types": "^3.3.0", @@ -1820,8 +1721,7 @@ }, "node_modules/@smithy/util-base64": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -1833,16 +1733,14 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1852,8 +1750,7 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -1864,8 +1761,7 @@ }, "node_modules/@smithy/util-config-provider": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1875,8 +1771,7 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", - "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.3", "@smithy/smithy-client": "^3.1.12", @@ -1890,8 +1785,7 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", - "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^3.0.5", "@smithy/credential-provider-imds": "^3.2.0", @@ -1907,8 +1801,7 @@ }, "node_modules/@smithy/util-endpoints": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", @@ -1920,8 +1813,7 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1931,8 +1823,7 @@ }, "node_modules/@smithy/util-middleware": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1943,8 +1834,7 @@ }, "node_modules/@smithy/util-retry": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.3", "@smithy/types": "^3.3.0", @@ -1956,8 +1846,7 @@ }, "node_modules/@smithy/util-stream": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^3.2.4", "@smithy/node-http-handler": "^3.1.4", @@ -1974,8 +1863,7 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1985,8 +1873,7 @@ }, "node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -1997,9 +1884,8 @@ }, "node_modules/@smithy/util-waiter": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.1", "@smithy/types": "^3.3.0", @@ -2011,63 +1897,54 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/caseless": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", "dev": true, + "license": "MIT", "dependencies": { "jest-diff": "^26.0.0", "pretty-format": "^26.0.0" @@ -2075,26 +1952,22 @@ }, "node_modules/@types/js-yaml": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==" + "license": "MIT" }, "node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/request": { "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -2104,47 +1977,41 @@ }, "node_modules/@types/tough-cookie": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.11", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", - "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/acorn": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2154,8 +2021,7 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2169,16 +2035,14 @@ }, "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" }, @@ -2191,60 +2055,52 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "license": "Python-2.0" }, "node_modules/asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/aws-cdk": { "version": "2.168.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.168.0.tgz", - "integrity": "sha512-jYsHcXBknuocRsdDUMZbcDN4E9EQE2F8oxNb7DtD38bn4/7TJehexxYg9yeAOH1pA120bGwLDX8STcAmf0kGIg==", "dev": true, + "license": "Apache-2.0", "bin": { "cdk": "bin/cdk" }, @@ -2257,8 +2113,6 @@ }, "node_modules/aws-cdk-lib": { "version": "2.168.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.168.0.tgz", - "integrity": "sha512-eZkXYJaCLKRY1XzFKWHPr/7vSMMRmhz8p2oZacfxzr6XrzWcD5xtoNx2qIf215jaAI5Hewg31AMGZvQRQVNajw==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -2272,6 +2126,7 @@ "yaml", "mime-types" ], + "license": "Apache-2.0", "dependencies": { "@aws-cdk/asset-awscli-v1": "^2.2.208", "@aws-cdk/asset-kubectl-v20": "^2.1.3", @@ -2597,51 +2452,44 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", - "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "license": "MIT" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2651,17 +2499,15 @@ }, "node_modules/byline": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -2671,27 +2517,24 @@ }, "node_modules/case": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "license": "(MIT OR GPL-3.0-or-later)", "engines": { "node": ">= 0.8.0" } }, "node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/cdk8s": { "version": "2.68.95", - "resolved": "https://registry.npmjs.org/cdk8s/-/cdk8s-2.68.95.tgz", - "integrity": "sha512-pLBOtj74cBfW+0o1+SZeDD+RUpDeM0nitRmkrPZ/RDfIWjLdZUCwlxy4465N91/fHatuToaEYwEuFnHkFgEwYA==", "bundleDependencies": [ "fast-json-patch", "follow-redirects", "yaml" ], + "license": "Apache-2.0", "dependencies": { "fast-json-patch": "^3.1.1", "follow-redirects": "^1.15.6", @@ -2706,8 +2549,7 @@ }, "node_modules/cdk8s-cli": { "version": "1.195.175", - "resolved": "https://registry.npmjs.org/cdk8s-cli/-/cdk8s-cli-1.195.175.tgz", - "integrity": "sha512-K0j3REP8xsdkkjT/6LReMol+hIe1g+QJGq2p+k+gbamsbtxR54Rr3QUXBgJyOYEfkNDw43CA3m7z3fbhbneWDg==", + "license": "Apache-2.0", "dependencies": { "@types/node": "^16", "ajv": "^8.17.1", @@ -2735,18 +2577,16 @@ }, "node_modules/cdk8s-cli/node_modules/@types/node": { "version": "16.18.105", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.105.tgz", - "integrity": "sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA==" + "license": "MIT" }, "node_modules/cdk8s-cli/node_modules/cdk8s": { "version": "1.63.102", - "resolved": "https://registry.npmjs.org/cdk8s/-/cdk8s-1.63.102.tgz", - "integrity": "sha512-CHWnEgEYPZQgsGVSbmqORtBQP/G5AFIunFLjRFx6fdWekup5ZgzmSNPx5RGtTodRdbOMhe/vrrQk8AQwIqwf2Q==", "bundleDependencies": [ "fast-json-patch", "follow-redirects", "yaml" ], + "license": "Apache-2.0", "dependencies": { "fast-json-patch": "^3.1.1", "follow-redirects": "^1.15.6", @@ -2796,8 +2636,7 @@ }, "node_modules/cdk8s-cli/node_modules/constructs": { "version": "3.4.344", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.344.tgz", - "integrity": "sha512-Qq3upn44oGdvgasHUKWVFsrynyYrtVRd9fd8ko9cJOrFzx9eCm3iI4bhBryQqaISdausbTYUOXmoEe/YSJ16Nw==", + "license": "Apache-2.0", "engines": { "node": ">= 16.14.0" } @@ -2839,8 +2678,7 @@ }, "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" @@ -2854,17 +2692,15 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2873,16 +2709,14 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/codemaker": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/codemaker/-/codemaker-1.102.0.tgz", - "integrity": "sha512-lxsbbcSMxCdT+9wUv1AvBH9791andoWDcQ6s7ZK6KsMZ+UkRLO3obzhi7Zm+RIA3lHecqzaGmOKyRnu0Dx/Zew==", + "license": "Apache-2.0", "dependencies": { "camelcase": "^6.3.0", "decamelize": "^5.0.1", @@ -2894,8 +2728,7 @@ }, "node_modules/codemaker/node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -2907,8 +2740,7 @@ }, "node_modules/codemaker/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -2918,16 +2750,14 @@ }, "node_modules/codemaker/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "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" }, @@ -2937,22 +2767,19 @@ }, "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/colors": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2962,13 +2789,11 @@ }, "node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "license": "MIT" }, "node_modules/commonmark": { "version": "0.31.1", - "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.31.1.tgz", - "integrity": "sha512-M6pbc3sRU96iiOK7rmjv/TNrXvTaOscvthUCq7YOrlvZWbqAA36fyEtBvyI3nCcEK4u+JAy9sAdtftIeXwIWig==", + "license": "BSD-2-Clause", "dependencies": { "entities": "~3.0.1", "mdurl": "~1.0.1", @@ -2983,31 +2808,26 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" }, "node_modules/constructs": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.5.tgz", - "integrity": "sha512-fOoP70YLevMZr5avJHx2DU3LNYmC6wM8OwdrNewMZou1kZnPGOeVzBrRjZNgFDHUlulYUjkpFRSpTE3D+n+ZSg==" + "license": "Apache-2.0" }, "node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3019,9 +2839,8 @@ }, "node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -3031,16 +2850,14 @@ }, "node_modules/date-format": { "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/debug": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3055,8 +2872,7 @@ }, "node_modules/decamelize": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3066,56 +2882,49 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/detect-indent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/detect-newline": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.14.2" } }, "node_modules/discontinuous-range": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + "license": "MIT" }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -3123,8 +2932,7 @@ }, "node_modules/downlevel-dts": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/downlevel-dts/-/downlevel-dts-0.11.0.tgz", - "integrity": "sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==", + "license": "MIT", "dependencies": { "semver": "^7.3.2", "shelljs": "^0.8.3", @@ -3134,17 +2942,28 @@ "downlevel-dts": "index.js" } }, + "node_modules/downlevel-dts/node_modules/typescript": { + "version": "6.0.0-dev.20260320", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.0-dev.20260320.tgz", + "integrity": "sha512-q5lk2al1i8WxqGYCvt322ED1G8jpK3MLBM9DacpRuL3gCs9PqWKjIWPoQ8bs745ONHLQEsJnp3Jww8/MSaELaQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3152,13 +2971,11 @@ }, "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/entities": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -3168,10 +2985,9 @@ }, "node_modules/esbuild": { "version": "0.19.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", - "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -3205,16 +3021,14 @@ }, "node_modules/escalade": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3224,28 +3038,24 @@ }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3259,19 +3069,15 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + "license": "MIT" }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -3282,6 +3088,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -3291,16 +3098,14 @@ }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3310,8 +3115,7 @@ }, "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3322,14 +3126,12 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + "license": "ISC" }, "node_modules/foreground-child": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -3343,18 +3145,16 @@ }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -3366,8 +3166,7 @@ }, "node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -3379,15 +3178,12 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3398,34 +3194,30 @@ }, "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==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3443,8 +3235,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3454,24 +3245,20 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "license": "ISC" }, "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -3482,9 +3269,8 @@ }, "node_modules/har-validator/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3498,22 +3284,19 @@ }, "node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "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/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3523,9 +3306,8 @@ }, "node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -3538,9 +3320,7 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3548,21 +3328,18 @@ }, "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/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-core-module": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -3575,24 +3352,21 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3602,44 +3376,38 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isomorphic-ws": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", "dev": true, + "license": "MIT", "peerDependencies": { "ws": "*" } }, "node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -3652,9 +3420,8 @@ }, "node_modules/jest-diff": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^26.6.2", @@ -3667,18 +3434,16 @@ }, "node_modules/jest-get-type": { "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.14.2" } }, "node_modules/jose": { "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", "dev": true, + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/panva" @@ -3686,8 +3451,7 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3697,14 +3461,12 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsii": { "version": "5.4.32", - "resolved": "https://registry.npmjs.org/jsii/-/jsii-5.4.32.tgz", - "integrity": "sha512-bHFQ/5Vx6EGAeJvmuqmdWWWTqMdJRTLaK7iaARs+AzRVyYXu2hJxIe/jCE7Nosz1XdS+sqAbxwGMusd2X1itbA==", + "license": "Apache-2.0", "dependencies": { "@jsii/check-node": "1.102.0", "@jsii/spec": "^1.102.0", @@ -3729,8 +3491,7 @@ }, "node_modules/jsii-pacmak": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/jsii-pacmak/-/jsii-pacmak-1.102.0.tgz", - "integrity": "sha512-3/nqBYNH8n/5IWI0sBFBYl1yATokEDUDQtYFLjzk7oXNWpUJ23/encI78Cs55ZS6UXcfWN3xczGLqCWnsgEpnw==", + "license": "Apache-2.0", "dependencies": { "@jsii/check-node": "1.102.0", "@jsii/spec": "^1.102.0", @@ -3757,8 +3518,7 @@ }, "node_modules/jsii-pacmak/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -3767,8 +3527,7 @@ }, "node_modules/jsii-pacmak/node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3780,8 +3539,7 @@ }, "node_modules/jsii-pacmak/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -3791,16 +3549,14 @@ }, "node_modules/jsii-pacmak/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/jsii-pacmak/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3815,16 +3571,14 @@ }, "node_modules/jsii-pacmak/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-pacmak/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -3840,16 +3594,14 @@ }, "node_modules/jsii-pacmak/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-reflect": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/jsii-reflect/-/jsii-reflect-1.102.0.tgz", - "integrity": "sha512-Lf2l8z3HSRSyouFGpDddfheP2LznKvFDKVlUWEzO+jDnQFOJOYTv4x617Yy5JIeIa9D8f70drRelOqove6hZtQ==", + "license": "Apache-2.0", "dependencies": { "@jsii/check-node": "1.102.0", "@jsii/spec": "^1.102.0", @@ -3867,8 +3619,7 @@ }, "node_modules/jsii-reflect/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -3877,8 +3628,7 @@ }, "node_modules/jsii-reflect/node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3890,8 +3640,7 @@ }, "node_modules/jsii-reflect/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -3901,16 +3650,14 @@ }, "node_modules/jsii-reflect/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/jsii-reflect/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3925,16 +3672,14 @@ }, "node_modules/jsii-reflect/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-reflect/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -3950,16 +3695,14 @@ }, "node_modules/jsii-reflect/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-rosetta": { "version": "5.4.30", - "resolved": "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-5.4.30.tgz", - "integrity": "sha512-DyJlVO1L7p37poEtja3ktr3zGv15kvnkVrJ+uPuv5+QOvSs2XTTzi2qsgt/l7N/6yXelQ2LDvSDzXfEY08UZjg==", + "license": "Apache-2.0", "dependencies": { "@jsii/check-node": "1.102.0", "@jsii/spec": "^1.102.0", @@ -3984,8 +3727,7 @@ }, "node_modules/jsii-rosetta/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3997,8 +3739,7 @@ }, "node_modules/jsii-rosetta/node_modules/typescript": { "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4009,8 +3750,7 @@ }, "node_modules/jsii-rosetta/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4025,16 +3765,14 @@ }, "node_modules/jsii-rosetta/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-rosetta/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4050,16 +3788,14 @@ }, "node_modules/jsii-rosetta/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/jsii-srcmak": { "version": "0.1.1215", - "resolved": "https://registry.npmjs.org/jsii-srcmak/-/jsii-srcmak-0.1.1215.tgz", - "integrity": "sha512-NUjNbd+vADMdToVy3bEZoAdP0G0uWU614P8sASXcHM988dRpvDtWAVh8bTtP9MApUiy4vUK16z2bIRiX8P/Bsw==", + "license": "Apache-2.0", "dependencies": { "fs-extra": "^9.1.0", "jsii": "~5.4.32", @@ -4074,8 +3810,7 @@ }, "node_modules/jsii-srcmak/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4087,8 +3822,7 @@ }, "node_modules/jsii-srcmak/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -4101,8 +3835,7 @@ }, "node_modules/jsii-srcmak/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -4112,16 +3845,14 @@ }, "node_modules/jsii-srcmak/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/jsii-srcmak/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4136,16 +3867,14 @@ }, "node_modules/jsii-srcmak/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii-srcmak/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4161,16 +3890,14 @@ }, "node_modules/jsii-srcmak/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/jsii/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4182,8 +3909,7 @@ }, "node_modules/jsii/node_modules/typescript": { "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4194,8 +3920,7 @@ }, "node_modules/jsii/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4210,16 +3935,14 @@ }, "node_modules/jsii/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/jsii/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4235,32 +3958,27 @@ }, "node_modules/jsii/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json-to-pretty-yaml": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", - "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", + "license": "Apache-2.0", "dependencies": { "remedial": "^1.0.7", "remove-trailing-spaces": "^1.0.6" @@ -4271,8 +3989,7 @@ }, "node_modules/json2jsii": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/json2jsii/-/json2jsii-0.4.4.tgz", - "integrity": "sha512-jTbmFuxivo20zb/JOKc2U5/qSFWsobJmglvmWVdQoWdR2Ip9KtY9t679QLs7TV/oYSY3VnJU83IWL1QH0eI/4w==", + "license": "Apache-2.0", "dependencies": { "camelcase": "^6.3.0", "json-schema": "^0.4.0", @@ -4281,17 +3998,15 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonpath-plus": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-8.1.0.tgz", - "integrity": "sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==", "dev": true, + "license": "MIT", "bin": { "jsonpath": "bin/jsonpath-cli.js", "jsonpath-plus": "bin/jsonpath-cli.js" @@ -4302,9 +4017,8 @@ }, "node_modules/jsprim": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4317,16 +4031,14 @@ }, "node_modules/k8s-resource-parser": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/k8s-resource-parser/-/k8s-resource-parser-0.2.1.tgz", - "integrity": "sha512-GWOefYDXi1m7WY/dmEtvoJSiPIQiLhMfoaQpMi5VNgOn/bho+kPD4lr8S9I1DkkXMHxtemW49EEId8gC2lGG7g==", + "license": "MIT", "dependencies": { "nearley": "^2.20.1" } }, "node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4336,18 +4048,15 @@ }, "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/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + "license": "MIT" }, "node_modules/log4js": { "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -4361,17 +4070,15 @@ }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -4382,27 +4089,23 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4413,18 +4116,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -4434,9 +4135,8 @@ }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4449,26 +4149,23 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -4479,9 +4176,8 @@ }, "node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -4494,26 +4190,22 @@ }, "node_modules/moo": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" + "license": "BSD-3-Clause" }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "license": "MIT", "bin": { "ncp": "bin/ncp" } }, "node_modules/nearley": { "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "license": "MIT", "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", @@ -4533,8 +4225,7 @@ }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -4542,18 +4233,16 @@ }, "node_modules/oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-hash": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 6" @@ -4561,9 +4250,8 @@ }, "node_modules/oidc-token-hash": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": "^10.13.0 || >=12.0.0" @@ -4571,25 +4259,22 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/oo-ascii-tree": { "version": "1.102.0", - "resolved": "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.102.0.tgz", - "integrity": "sha512-SNcZNfqtov0Af+6hx+qnliUhTOIxPUfboX/zQnc2EdmGHLXKQ3eSPQ40NopCgv4canzl5EvKGlCJaMCvk2viCQ==", + "license": "Apache-2.0", "engines": { "node": ">= 14.17.0" } }, "node_modules/openid-client": { "version": "5.6.5", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.5.tgz", - "integrity": "sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "jose": "^4.15.5", @@ -4603,8 +4288,7 @@ }, "node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4617,8 +4301,7 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4628,53 +4311,46 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/package-json-from-dist": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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==" + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -4688,20 +4364,17 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4711,9 +4384,8 @@ }, "node_modules/pretty-format": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -4726,32 +4398,27 @@ }, "node_modules/psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -4765,17 +4432,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/railroad-diagrams": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + "license": "CC0-1.0" }, "node_modules/randexp": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "license": "MIT", "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" @@ -4786,14 +4452,11 @@ }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { "resolve": "^1.1.6" }, @@ -4803,23 +4466,19 @@ }, "node_modules/remedial": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", - "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", + "license": "(MIT OR Apache-2.0)", "engines": { "node": "*" } }, "node_modules/remove-trailing-spaces": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", - "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" + "license": "MIT" }, "node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -4848,9 +4507,8 @@ }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -4862,39 +4520,33 @@ }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "license": "ISC" }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -4909,16 +4561,14 @@ }, "node_modules/ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "license": "MIT", "engines": { "node": ">=0.12" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -4926,20 +4576,17 @@ }, "node_modules/rfc4648": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", - "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "license": "MIT" }, "node_modules/rimraf": { "version": "5.0.9", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz", - "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.3.7" }, @@ -4955,8 +4602,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -4971,14 +4616,13 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "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==", "dev": true, "funding": [ { @@ -4993,12 +4637,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-stable-stringify": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", "license": "MIT", "engines": { "node": ">=10" @@ -5006,14 +4649,12 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5023,30 +4664,26 @@ }, "node_modules/semver-intersect": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.5.0.tgz", - "integrity": "sha512-BDjWX7yCC0haX4W/zrnV2JaMpVirwaEkGOBmgRQtH++F1N3xl9v7k9H44xfTqwl+yLNNSbMKosoVSTIiJVQ2Pw==", + "license": "MIT", "dependencies": { "semver": "^6.3.0" } }, "node_modules/semver-intersect/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5056,17 +4693,15 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -5081,8 +4716,7 @@ }, "node_modules/shelljs/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5090,9 +4724,7 @@ }, "node_modules/shelljs/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5110,8 +4742,7 @@ }, "node_modules/shelljs/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5121,9 +4752,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -5133,8 +4763,7 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -5149,8 +4778,7 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -5158,8 +4786,7 @@ }, "node_modules/sort-json": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-json/-/sort-json-2.0.1.tgz", - "integrity": "sha512-s8cs2bcsQCzo/P2T/uoU6Js4dS/jnX8+4xunziNoq9qmSpZNCrRIAIvp4avsz0ST18HycV4z/7myJ7jsHWB2XQ==", + "license": "MIT", "dependencies": { "detect-indent": "^5.0.0", "detect-newline": "^2.1.0", @@ -5171,8 +4798,7 @@ }, "node_modules/spdx-license-list": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/spdx-license-list/-/spdx-license-list-6.9.0.tgz", - "integrity": "sha512-L2jl5vc2j6jxWcNCvcVj/BW9A8yGIG02Dw+IUw0ZxDM70f7Ylf5Hq39appV1BI9yxyWQRpq2TQ1qaXvf+yjkqA==", + "license": "CC0-1.0", "engines": { "node": ">=8" }, @@ -5182,17 +4808,15 @@ }, "node_modules/sscaff": { "version": "1.2.274", - "resolved": "https://registry.npmjs.org/sscaff/-/sscaff-1.2.274.tgz", - "integrity": "sha512-sztRa50SL1LVxZnF1au6QT1SC2z0S1oEOyi2Kpnlg6urDns93aL32YxiJcNkLcY+VHFtVqm/SRv4cb+6LeoBQA==", + "license": "Apache-2.0", "engines": { "node": ">= 12.13.0" } }, "node_modules/sshpk": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5215,30 +4839,26 @@ }, "node_modules/stream-buffers": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.3.tgz", - "integrity": "sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==", "dev": true, + "license": "Unlicense", "engines": { "node": ">= 0.10.0" } }, "node_modules/stream-chain": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + "license": "BSD-3-Clause" }, "node_modules/stream-json": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" } }, "node_modules/streamroller": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "license": "MIT", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -5250,8 +4870,7 @@ }, "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", @@ -5264,9 +4883,8 @@ "node_modules/string-width-cjs": { "name": "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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5278,8 +4896,7 @@ }, "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" }, @@ -5290,9 +4907,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5302,13 +4918,11 @@ }, "node_modules/strnum": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "license": "MIT" }, "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" }, @@ -5318,8 +4932,7 @@ }, "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==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5329,8 +4942,7 @@ }, "node_modules/table": { "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -5344,9 +4956,8 @@ }, "node_modules/tar": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.0.tgz", - "integrity": "sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==", "dev": true, + "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -5361,17 +4972,15 @@ }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5381,9 +4990,8 @@ }, "node_modules/tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -5394,9 +5002,8 @@ }, "node_modules/ts-node": { "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -5437,23 +5044,20 @@ }, "node_modules/ts-node/node_modules/acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -5463,14 +5067,12 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/type-fest": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", - "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -5480,8 +5082,8 @@ }, "node_modules/typescript": { "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5492,53 +5094,47 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -5547,9 +5143,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5562,18 +5157,15 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "license": "ISC" }, "node_modules/workerpool": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" + "license": "Apache-2.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", @@ -5586,9 +5178,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5603,14 +5194,12 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/ws": { "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -5629,28 +5218,24 @@ }, "node_modules/xmlbuilder": { "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", "engines": { "node": ">=8.0" } }, "node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "license": "ISC" }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, + "license": "ISC", "optional": true }, "node_modules/yaml": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -5660,8 +5245,7 @@ }, "node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -5681,8 +5265,7 @@ }, "node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -5693,4156 +5276,32 @@ }, "node_modules/yargs-parser/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yargs-parser/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/yargs/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } } - }, - "dependencies": { - "@aws-cdk/asset-awscli-v1": { - "version": "2.2.212", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.212.tgz", - "integrity": "sha512-7WqbnWUkBBcAzEdfRrpz6sCOheUPf4JEUdGvzJ4EEufXeT7v7nRbRmTvUBbQ+OQlCv9UrVj9XuFxKPjkvneGMQ==" - }, - "@aws-cdk/asset-kubectl-v20": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", - "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" - }, - "@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", - "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" - }, - "@aws-cdk/aws-sagemaker-alpha": { - "version": "2.147.0-alpha.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker-alpha/-/aws-sagemaker-alpha-2.147.0-alpha.0.tgz", - "integrity": "sha512-sykKNgArb9rzGx+2dJ1WF2lwS8AYrKuLc6PWzYosUsL8n86V0dnBP6X8hRItcTQiiROu3bN9zVJtwJxJZg+NTg==", - "requires": {} - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "38.0.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz", - "integrity": "sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==", - "requires": { - "jsonschema": "^1.4.1", - "semver": "^7.6.3" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.1", - "bundled": true - }, - "semver": { - "version": "7.6.3", - "bundled": true - } - } - }, - "@aws-cdk/lambda-layer-kubectl-v29": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v29/-/lambda-layer-kubectl-v29-2.1.1.tgz", - "integrity": "sha512-6CChfYXbV8jDIEhUrF2oxXUJPYjXRjt4d6D3Tck9z9wd1jN17juOHTetompVJCDYWfqrXYWT2gK8PEc9pqJojg==", - "requires": {} - }, - "@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "requires": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "requires": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, - "@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "requires": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "requires": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "requires": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, - "@aws-sdk/client-elastic-load-balancing-v2": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elastic-load-balancing-v2/-/client-elastic-load-balancing-v2-3.632.0.tgz", - "integrity": "sha512-VcF+eYp3UReSBSnFTlprCZtPMcRj1PaZCdt6xibS0+BZG0/zA4u0IW7iOL2jvTLliyCbh6vA1frZb+3RSR+FWQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.632.0", - "@aws-sdk/client-sts": "3.632.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.632.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-resource-groups-tagging-api": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-resource-groups-tagging-api/-/client-resource-groups-tagging-api-3.632.0.tgz", - "integrity": "sha512-0YE+5GayFzvgsgwRKdwZPujVG8YfSIkCrM7DYQxK7Ct9BZWvbPbeAcgAxpdhnpSqwdh7AlcWSfyEP3g+vYQvqw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.632.0", - "@aws-sdk/client-sts": "3.632.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.632.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-secrets-manager": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.632.0.tgz", - "integrity": "sha512-WsQhPHHK1yPfALcP1B7nBSGDzky6vFTUEXnUdfzb5Xy2cT+JTBTS6ChtQGqqOuGHDP/3t/9soqZ+L6rUCYBb/Q==", - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.632.0", - "@aws-sdk/client-sts": "3.632.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.632.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - } - }, - "@aws-sdk/client-sso": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.632.0.tgz", - "integrity": "sha512-iYWHiKBz44m3chCFvtvHnvCpL2rALzyr1e6tOZV3dLlOKtQtDUlPy6OtnXDu4y+wyJCniy8ivG3+LAe4klzn1Q==", - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.632.0.tgz", - "integrity": "sha512-Oh1fIWaoZluihOCb/zDEpRTi+6an82fgJz7fyRBugyLhEtDjmvpCQ3oKjzaOhoN+4EvXAm1ZS/ZgpvXBlIRTgw==", - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.632.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sts": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.632.0.tgz", - "integrity": "sha512-Ss5cBH09icpTvT+jtGGuQlRdwtO7RyE9BF4ZV/CEPATdd9whtJt4Qxdya8BUnkWR7h5HHTrQHqai3YVYjku41A==", - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.632.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.632.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/core": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz", - "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==", - "requires": { - "@smithy/core": "^2.3.2", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.622.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", - "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.632.0.tgz", - "integrity": "sha512-m6epoW41xa1ajU5OiHcmQHoGVtrbXBaRBOUhlCLZmcaqMLYsboM4iD/WZP8aatKEON5tTnVXh/4StV8D/+wemw==", - "requires": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.632.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.632.0.tgz", - "integrity": "sha512-cL8fuJWm/xQBO4XJPkeuZzl3XinIn9EExWgzpG48NRMKR5us1RI/ucv7xFbBBaG+r/sDR2HpYBIA3lVIpm1H3Q==", - "requires": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-ini": "3.632.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.632.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.632.0.tgz", - "integrity": "sha512-P/4wB6j7ym5QCPTL2xlMfvf2NcXSh+z0jmsZP4WW/tVwab4hvgabPPbLeEZDSWZ0BpgtxKGvRq0GSHuGeirQbA==", - "requires": { - "@aws-sdk/client-sso": "3.632.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz", - "integrity": "sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz", - "integrity": "sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", - "requires": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@esbuild/android-arm": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", - "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", - "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", - "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", - "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", - "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", - "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", - "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", - "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", - "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", - "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", - "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", - "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", - "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", - "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", - "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", - "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", - "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", - "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", - "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", - "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", - "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", - "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", - "dev": true, - "optional": true - }, - "@ethanresnick/match": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@ethanresnick/match/-/match-0.0.4.tgz", - "integrity": "sha512-xTGcxVU8FqKcZCMbKZHVDW3Wcqw49BMQAsNViILyWHvq+BCk4uUb3lenF3gQBp/AwuJEdQbKV1SfoGS7A1cOHA==" - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "requires": { - "minipass": "^7.0.4" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jsii/check-node": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.102.0.tgz", - "integrity": "sha512-uyKjxCe1ou11RJz6koBr5vXtyaGjTA45hF+H88GNW96vms7jKqmYdMm067Az1OKwl38h02lQRQ2tmoEzV7u74w==", - "requires": { - "chalk": "^4.1.2", - "semver": "^7.6.3" - } - }, - "@jsii/spec": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/@jsii/spec/-/spec-1.102.0.tgz", - "integrity": "sha512-/VcmoEyp7HR0xoFz47/fiyZjAv+0gHG4ZwTbgB+umbB88bTbLZadnqBL7T9OIKQbK4w8HNOaRnHwjNBIYIPxWQ==", - "requires": { - "ajv": "^8.17.1" - } - }, - "@kubernetes/client-node": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.21.0.tgz", - "integrity": "sha512-yYRbgMeyQbvZDHt/ZqsW3m4lRefzhbbJEuj8sVXM+bufKrgmzriA2oq7lWPH/k/LQIicAME9ixPUadTrxIF6dQ==", - "dev": true, - "requires": { - "@types/js-yaml": "^4.0.1", - "@types/node": "^20.1.1", - "@types/request": "^2.47.1", - "@types/ws": "^8.5.3", - "byline": "^5.0.0", - "isomorphic-ws": "^5.0.0", - "js-yaml": "^4.1.0", - "jsonpath-plus": "^8.0.0", - "openid-client": "^5.3.0", - "request": "^2.88.0", - "rfc4648": "^1.3.0", - "stream-buffers": "^3.0.2", - "tar": "^7.0.0", - "tslib": "^2.4.1", - "ws": "^8.11.0" - }, - "dependencies": { - "@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", - "requires": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - } - }, - "@smithy/core": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", - "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", - "requires": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - } - }, - "@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", - "requires": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "tslib": "^2.6.2" - } - }, - "@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "requires": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", - "requires": { - "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", - "requires": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "requires": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-retry": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", - "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", - "requires": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - } - }, - "@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "requires": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "requires": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "requires": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "requires": { - "@smithy/types": "^3.3.0" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", - "requires": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/smithy-client": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", - "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", - "requires": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - } - }, - "@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "requires": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "requires": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "requires": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", - "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", - "requires": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", - "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", - "requires": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", - "requires": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "requires": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", - "requires": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "requires": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "requires": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", - "dev": true, - "requires": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==" - }, - "@types/node": { - "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==", - "dev": true - }, - "@types/request": { - "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true - }, - "@types/ws": { - "version": "8.5.11", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", - "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==" - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "aws-cdk": { - "version": "2.168.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.168.0.tgz", - "integrity": "sha512-jYsHcXBknuocRsdDUMZbcDN4E9EQE2F8oxNb7DtD38bn4/7TJehexxYg9yeAOH1pA120bGwLDX8STcAmf0kGIg==", - "dev": true, - "requires": { - "fsevents": "2.3.2" - } - }, - "aws-cdk-lib": { - "version": "2.168.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.168.0.tgz", - "integrity": "sha512-eZkXYJaCLKRY1XzFKWHPr/7vSMMRmhz8p2oZacfxzr6XrzWcD5xtoNx2qIf215jaAI5Hewg31AMGZvQRQVNajw==", - "requires": { - "@aws-cdk/asset-awscli-v1": "^2.2.208", - "@aws-cdk/asset-kubectl-v20": "^2.1.3", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^38.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.2", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.3", - "table": "^6.8.2", - "yaml": "1.10.2" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "ajv": { - "version": "8.17.1", - "bundled": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "case": { - "version": "1.6.3", - "bundled": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "bundled": true - }, - "fast-uri": { - "version": "3.0.3", - "bundled": true - }, - "fs-extra": { - "version": "11.2.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true - }, - "ignore": { - "version": "5.3.2", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "bundled": true - }, - "jsonfile": { - "version": "6.1.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonschema": { - "version": "1.4.1", - "bundled": true - }, - "lodash.truncate": { - "version": "4.4.2", - "bundled": true - }, - "mime-db": { - "version": "1.52.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.35", - "bundled": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "punycode": { - "version": "2.3.1", - "bundled": true - }, - "require-from-string": { - "version": "2.0.2", - "bundled": true - }, - "semver": { - "version": "7.6.3", - "bundled": true - }, - "slice-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "table": { - "version": "6.8.2", - "bundled": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "universalify": { - "version": "2.0.1", - "bundled": true - }, - "yaml": { - "version": "1.10.2", - "bundled": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", - "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "cdk8s": { - "version": "2.68.95", - "resolved": "https://registry.npmjs.org/cdk8s/-/cdk8s-2.68.95.tgz", - "integrity": "sha512-pLBOtj74cBfW+0o1+SZeDD+RUpDeM0nitRmkrPZ/RDfIWjLdZUCwlxy4465N91/fHatuToaEYwEuFnHkFgEwYA==", - "requires": { - "fast-json-patch": "^3.1.1", - "follow-redirects": "^1.15.6", - "yaml": "2.5.0" - }, - "dependencies": { - "fast-json-patch": { - "version": "3.1.1", - "bundled": true - }, - "follow-redirects": { - "version": "1.15.6", - "bundled": true - }, - "yaml": { - "version": "2.5.0", - "bundled": true - } - } - }, - "cdk8s-cli": { - "version": "1.195.175", - "resolved": "https://registry.npmjs.org/cdk8s-cli/-/cdk8s-cli-1.195.175.tgz", - "integrity": "sha512-K0j3REP8xsdkkjT/6LReMol+hIe1g+QJGq2p+k+gbamsbtxR54Rr3QUXBgJyOYEfkNDw43CA3m7z3fbhbneWDg==", - "requires": { - "@types/node": "^16", - "ajv": "^8.17.1", - "cdk8s": "^1.63.102", - "codemaker": "^1.102.0", - "colors": "1.4.0", - "constructs": "^3.4.344", - "fs-extra": "^8", - "jsii-pacmak": "^1.102.0", - "jsii-rosetta": "^5.4.30", - "jsii-srcmak": "^0.1.1214", - "json2jsii": "^0.4.4", - "semver": "^7.6.3", - "sscaff": "^1.2.274", - "table": "^6.8.2", - "yaml": "2.5.0", - "yargs": "^15" - }, - "dependencies": { - "@types/node": { - "version": "16.18.105", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.105.tgz", - "integrity": "sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA==" - }, - "cdk8s": { - "version": "1.63.102", - "resolved": "https://registry.npmjs.org/cdk8s/-/cdk8s-1.63.102.tgz", - "integrity": "sha512-CHWnEgEYPZQgsGVSbmqORtBQP/G5AFIunFLjRFx6fdWekup5ZgzmSNPx5RGtTodRdbOMhe/vrrQk8AQwIqwf2Q==", - "requires": { - "fast-json-patch": "^3.1.1", - "follow-redirects": "^1.15.6", - "yaml": "2.5.0" - }, - "dependencies": { - "fast-json-patch": { - "version": "3.1.1", - "bundled": true - }, - "follow-redirects": { - "version": "1.15.6", - "bundled": true - }, - "yaml": { - "version": "2.5.0", - "bundled": true - } - } - }, - "constructs": { - "version": "3.4.344", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.344.tgz", - "integrity": "sha512-Qq3upn44oGdvgasHUKWVFsrynyYrtVRd9fd8ko9cJOrFzx9eCm3iI4bhBryQqaISdausbTYUOXmoEe/YSJ16Nw==" - } - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - }, - "codemaker": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/codemaker/-/codemaker-1.102.0.tgz", - "integrity": "sha512-lxsbbcSMxCdT+9wUv1AvBH9791andoWDcQ6s7ZK6KsMZ+UkRLO3obzhi7Zm+RIA3lHecqzaGmOKyRnu0Dx/Zew==", - "requires": { - "camelcase": "^6.3.0", - "decamelize": "^5.0.1", - "fs-extra": "^10.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - } - } - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commonmark": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.31.1.tgz", - "integrity": "sha512-M6pbc3sRU96iiOK7rmjv/TNrXvTaOscvthUCq7YOrlvZWbqAA36fyEtBvyI3nCcEK4u+JAy9sAdtftIeXwIWig==", - "requires": { - "entities": "~3.0.1", - "mdurl": "~1.0.1", - "minimist": "~1.2.5" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "constructs": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.5.tgz", - "integrity": "sha512-fOoP70YLevMZr5avJHx2DU3LNYmC6wM8OwdrNewMZou1kZnPGOeVzBrRjZNgFDHUlulYUjkpFRSpTE3D+n+ZSg==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==" - }, - "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "downlevel-dts": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/downlevel-dts/-/downlevel-dts-0.11.0.tgz", - "integrity": "sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==", - "requires": { - "semver": "^7.3.2", - "shelljs": "^0.8.3", - "typescript": "next" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "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==" - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "esbuild": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", - "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.19.5", - "@esbuild/android-arm64": "0.19.5", - "@esbuild/android-x64": "0.19.5", - "@esbuild/darwin-arm64": "0.19.5", - "@esbuild/darwin-x64": "0.19.5", - "@esbuild/freebsd-arm64": "0.19.5", - "@esbuild/freebsd-x64": "0.19.5", - "@esbuild/linux-arm": "0.19.5", - "@esbuild/linux-arm64": "0.19.5", - "@esbuild/linux-ia32": "0.19.5", - "@esbuild/linux-loong64": "0.19.5", - "@esbuild/linux-mips64el": "0.19.5", - "@esbuild/linux-ppc64": "0.19.5", - "@esbuild/linux-riscv64": "0.19.5", - "@esbuild/linux-s390x": "0.19.5", - "@esbuild/linux-x64": "0.19.5", - "@esbuild/netbsd-x64": "0.19.5", - "@esbuild/openbsd-x64": "0.19.5", - "@esbuild/sunos-x64": "0.19.5", - "@esbuild/win32-arm64": "0.19.5", - "@esbuild/win32-ia32": "0.19.5", - "@esbuild/win32-x64": "0.19.5" - } - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" - }, - "fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "requires": { - "strnum": "^1.0.5" - } - }, - "fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" - }, - "foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "requires": { - "hasown": "^2.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "dev": true, - "requires": {} - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", - "dev": true, - "optional": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsii": { - "version": "5.4.32", - "resolved": "https://registry.npmjs.org/jsii/-/jsii-5.4.32.tgz", - "integrity": "sha512-bHFQ/5Vx6EGAeJvmuqmdWWWTqMdJRTLaK7iaARs+AzRVyYXu2hJxIe/jCE7Nosz1XdS+sqAbxwGMusd2X1itbA==", - "requires": { - "@jsii/check-node": "1.102.0", - "@jsii/spec": "^1.102.0", - "case": "^1.6.3", - "chalk": "^4", - "downlevel-dts": "^0.11.0", - "fast-deep-equal": "^3.1.3", - "log4js": "^6.9.1", - "semver": "^7.6.3", - "semver-intersect": "^1.5.0", - "sort-json": "^2.0.1", - "spdx-license-list": "^6.9.0", - "typescript": "~5.4", - "yargs": "^17.7.2" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "jsii-pacmak": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/jsii-pacmak/-/jsii-pacmak-1.102.0.tgz", - "integrity": "sha512-3/nqBYNH8n/5IWI0sBFBYl1yATokEDUDQtYFLjzk7oXNWpUJ23/encI78Cs55ZS6UXcfWN3xczGLqCWnsgEpnw==", - "requires": { - "@jsii/check-node": "1.102.0", - "@jsii/spec": "^1.102.0", - "clone": "^2.1.2", - "codemaker": "^1.102.0", - "commonmark": "^0.31.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.1.0", - "jsii-reflect": "^1.102.0", - "semver": "^7.6.3", - "spdx-license-list": "^6.9.0", - "xmlbuilder": "^15.1.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - } - } - }, - "jsii-reflect": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/jsii-reflect/-/jsii-reflect-1.102.0.tgz", - "integrity": "sha512-Lf2l8z3HSRSyouFGpDddfheP2LznKvFDKVlUWEzO+jDnQFOJOYTv4x617Yy5JIeIa9D8f70drRelOqove6hZtQ==", - "requires": { - "@jsii/check-node": "1.102.0", - "@jsii/spec": "^1.102.0", - "chalk": "^4", - "fs-extra": "^10.1.0", - "oo-ascii-tree": "^1.102.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - } - } - }, - "jsii-rosetta": { - "version": "5.4.30", - "resolved": "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-5.4.30.tgz", - "integrity": "sha512-DyJlVO1L7p37poEtja3ktr3zGv15kvnkVrJ+uPuv5+QOvSs2XTTzi2qsgt/l7N/6yXelQ2LDvSDzXfEY08UZjg==", - "requires": { - "@jsii/check-node": "1.102.0", - "@jsii/spec": "^1.102.0", - "@xmldom/xmldom": "^0.8.10", - "chalk": "^4", - "commonmark": "^0.31.1", - "fast-glob": "^3.3.2", - "jsii": "~5.4.0", - "semver": "^7.6.3", - "semver-intersect": "^1.5.0", - "stream-json": "^1.8.0", - "typescript": "~5.4", - "workerpool": "^6.5.1", - "yargs": "^17.7.2" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "jsii-srcmak": { - "version": "0.1.1215", - "resolved": "https://registry.npmjs.org/jsii-srcmak/-/jsii-srcmak-0.1.1215.tgz", - "integrity": "sha512-NUjNbd+vADMdToVy3bEZoAdP0G0uWU614P8sASXcHM988dRpvDtWAVh8bTtP9MApUiy4vUK16z2bIRiX8P/Bsw==", - "requires": { - "fs-extra": "^9.1.0", - "jsii": "~5.4.32", - "jsii-pacmak": "^1.102.0", - "jsii-rosetta": "^5.4.30", - "ncp": "^2.0.0", - "yargs": "^17.7.2" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json-to-pretty-yaml": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", - "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", - "requires": { - "remedial": "^1.0.7", - "remove-trailing-spaces": "^1.0.6" - } - }, - "json2jsii": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/json2jsii/-/json2jsii-0.4.4.tgz", - "integrity": "sha512-jTbmFuxivo20zb/JOKc2U5/qSFWsobJmglvmWVdQoWdR2Ip9KtY9t679QLs7TV/oYSY3VnJU83IWL1QH0eI/4w==", - "requires": { - "camelcase": "^6.3.0", - "json-schema": "^0.4.0", - "snake-case": "^3.0.4" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonpath-plus": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-8.1.0.tgz", - "integrity": "sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "k8s-resource-parser": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/k8s-resource-parser/-/k8s-resource-parser-0.2.1.tgz", - "integrity": "sha512-GWOefYDXi1m7WY/dmEtvoJSiPIQiLhMfoaQpMi5VNgOn/bho+kPD4lr8S9I1DkkXMHxtemW49EEId8gC2lGG7g==", - "requires": { - "nearley": "^2.20.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" - }, - "log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true - }, - "minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "dev": true, - "requires": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - } - }, - "mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true - }, - "moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - } - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "dev": true, - "optional": true - }, - "oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "oo-ascii-tree": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.102.0.tgz", - "integrity": "sha512-SNcZNfqtov0Af+6hx+qnliUhTOIxPUfboX/zQnc2EdmGHLXKQ3eSPQ40NopCgv4canzl5EvKGlCJaMCvk2viCQ==" - }, - "openid-client": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.5.tgz", - "integrity": "sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==", - "dev": true, - "optional": true, - "requires": { - "jose": "^4.15.5", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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==" - }, - "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "remedial": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", - "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==" - }, - "remove-trailing-spaces": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", - "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rfc4648": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", - "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==", - "dev": true - }, - "rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" - }, - "rimraf": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz", - "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==", - "dev": true, - "requires": { - "glob": "^10.3.7" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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==", - "dev": true - }, - "safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" - }, - "semver-intersect": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.5.0.tgz", - "integrity": "sha512-BDjWX7yCC0haX4W/zrnV2JaMpVirwaEkGOBmgRQtH++F1N3xl9v7k9H44xfTqwl+yLNNSbMKosoVSTIiJVQ2Pw==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "sort-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-json/-/sort-json-2.0.1.tgz", - "integrity": "sha512-s8cs2bcsQCzo/P2T/uoU6Js4dS/jnX8+4xunziNoq9qmSpZNCrRIAIvp4avsz0ST18HycV4z/7myJ7jsHWB2XQ==", - "requires": { - "detect-indent": "^5.0.0", - "detect-newline": "^2.1.0", - "minimist": "^1.2.0" - } - }, - "spdx-license-list": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/spdx-license-list/-/spdx-license-list-6.9.0.tgz", - "integrity": "sha512-L2jl5vc2j6jxWcNCvcVj/BW9A8yGIG02Dw+IUw0ZxDM70f7Ylf5Hq39appV1BI9yxyWQRpq2TQ1qaXvf+yjkqA==" - }, - "sscaff": { - "version": "1.2.274", - "resolved": "https://registry.npmjs.org/sscaff/-/sscaff-1.2.274.tgz", - "integrity": "sha512-sztRa50SL1LVxZnF1au6QT1SC2z0S1oEOyi2Kpnlg6urDns93aL32YxiJcNkLcY+VHFtVqm/SRv4cb+6LeoBQA==" - }, - "sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stream-buffers": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.3.tgz", - "integrity": "sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==", - "dev": true - }, - "stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" - }, - "stream-json": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", - "requires": { - "stream-chain": "^2.2.5" - } - }, - "streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "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==" - }, - "table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "tar": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.0.tgz", - "integrity": "sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==", - "dev": true, - "requires": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "dependencies": { - "yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - } - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type-fest": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", - "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==" - }, - "typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==" - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "requires": {} - }, - "xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true - }, - "yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } } } diff --git a/.devops/aws/src/app.ts b/.devops/aws/src/app.ts index b30206f..99dbf50 100644 --- a/.devops/aws/src/app.ts +++ b/.devops/aws/src/app.ts @@ -140,22 +140,14 @@ async function main() { Prod: { datadogRedisSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/api/datadog-redis-5MVpFr', - datadogSnowflakeSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/api/datadog-snowflake-ChoHce', scyllaSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/Api/Scylla-Ff5SYT', - snowflakeSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/Api/Snowflake-GSbYPm', sessionSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/Api/SessionSecret-pqjJMo', - snowpipeQueue: - 'arn:aws:sqs:us-east-2:372912203759:sf-snowpipe-AIDAVNU2MU7XZEWHX4NYF-gDuL_ERzbUuPyF2CcnWj6A', kafkaSchemaRegistrySecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/kafka/schema-registry-ngb9kf', kafkaApiServiceAccountSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/kafka/api-service-account-2Ir1Vc', - kafkaSnowflakeWorkerServiceAccountSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/kafka/snowflake-ingest-worker-service-account-2ks9lG', redisSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/Api/Redis-5wOZWr', graphqlOpaqueScalarSecret: @@ -164,38 +156,26 @@ async function main() { Staging: { datadogRedisSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/api/datadog-redis-I4eNaY', - datadogSnowflakeSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/api/datadog-snowflake-Ogmcmb', scyllaSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/Scylla-8qB2b6', - snowflakeSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/Snowflake-NmQIg4', sessionSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/SessionSecret-Hp8WsT', kafkaSchemaRegistrySecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/kafka/schema-registry-tOpR2W', kafkaApiServiceAccountSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/kafka/api-service-account-LzIZdE', - kafkaSnowflakeWorkerServiceAccountSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/kafka/snowflake-ingest-worker-service-account-a8CRYE', redisSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/Redis-S4vd12', graphqlOpaqueScalarSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/graphqlOpaqueScalar-8Ov3Hy', - snowpipeQueue: - 'arn:aws:sqs:us-east-2:372912203759:sf-snowpipe-AIDAVNU2MU7XZEWHX4NYF-gDuL_ERzbUuPyF2CcnWj6A', }, Demo: { datadogRedisSecret: '', - datadogSnowflakeSecret: '', scyllaSecret: '', - snowflakeSecret: - 'arn:aws:secretsmanager:us-east-2:361188080279:secret:Demo/Api/Snowflake-CUtb5a', sessionSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:Demo/Api/SessionSecret-Vu2BpX', kafkaSchemaRegistrySecret: 'RESET_ON_CLUSTER_RECREATE', kafkaApiServiceAccountSecret: 'RESET_ON_CLUSTER_RECREATE', - kafkaSnowflakeWorkerServiceAccountSecret: 'RESET_ON_CLUSTER_RECREATE', redisSecret: 'arn:aws:secretsmanager:us-east-2:361188080279:secret:staging/Api/Redis-S4vd12', graphqlOpaqueScalarSecret: '', diff --git a/.devops/aws/src/constants.ts b/.devops/aws/src/constants.ts index 9d051bc..d798817 100644 --- a/.devops/aws/src/constants.ts +++ b/.devops/aws/src/constants.ts @@ -23,13 +23,6 @@ export const pgEnvVars = [ 'DATABASE_PASSWORD', ] as const; -export type SnowflakeEnvVar = (typeof snowflakeEnvVars)[number]; -export const snowflakeEnvVars = [ - 'SNOWFLAKE_USERNAME', - 'SNOWFLAKE_PASSWORD', - 'SNOWFLAKE_DB_NAME', -] as const; - export type RedisEnvVar = (typeof redisEnvVars)[number]; export const redisEnvVars = [ 'REDIS_USE_CLUSTER', @@ -67,24 +60,18 @@ export type KafkaEnvVar = (typeof kafkaEnvVars)[number]; export const topicSchemaIds = { Demo: { // TODO - KAFKA_TOPIC_KEY_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 0, - KAFKA_TOPIC_VALUE_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 0, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 0, KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 0, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0: 0, KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0: 0, }, Staging: { - KAFKA_TOPIC_KEY_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 100002, - KAFKA_TOPIC_VALUE_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 100003, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 100006, KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 100008, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0: 100006, KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0: 100008, }, Prod: { - KAFKA_TOPIC_KEY_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 100002, - KAFKA_TOPIC_VALUE_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS: 100004, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 100005, KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS: 100008, KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0: 100005, @@ -95,7 +82,6 @@ export const topicSchemaIds = { }; type TopicNameInEnvVar = - | 'SNOWFLAKE_INGEST_EVENTS' | 'ITEM_SUBMISSION_EVENTS' | 'ITEM_SUBMISSION_EVENTS_RETRY_0'; // prettier-ignore diff --git a/.devops/aws/src/constructs/MigrationRunner.ts b/.devops/aws/src/constructs/MigrationRunner.ts index ab956b2..d292192 100644 --- a/.devops/aws/src/constructs/MigrationRunner.ts +++ b/.devops/aws/src/constructs/MigrationRunner.ts @@ -34,7 +34,7 @@ type RunMigrationsProps = { secrets: SecretsMap; deploymentEnvironment: DeploymentEnvironmentName; env: Record; - dbArgs: ('api-server-pg' | 'snowflake' | 'scylla')[]; + dbArgs: ('api-server-pg' | 'scylla')[]; }; export class MigrationRunner extends Construct { diff --git a/.devops/aws/src/stacks/api-service/api.ts b/.devops/aws/src/stacks/api-service/api.ts index c7d07fc..c36f084 100644 --- a/.devops/aws/src/stacks/api-service/api.ts +++ b/.devops/aws/src/stacks/api-service/api.ts @@ -33,7 +33,6 @@ import { PgEnvVar, RedisEnvVar, repoRootDir, - SnowflakeEnvVar, topicSchemaIds, } from '../../constants.js'; import { @@ -102,7 +101,6 @@ type ApiStackProps = StackProps & { | 'SLACK_APP_BEARER_TOKEN' | PgEnvVar | RedisEnvVar - | SnowflakeEnvVar >; stage: DeploymentEnvironmentName; kafkaHosts: { diff --git a/.devops/aws/src/stacks/api-service/db.ts b/.devops/aws/src/stacks/api-service/db.ts index 1398fa1..6fc1158 100644 --- a/.devops/aws/src/stacks/api-service/db.ts +++ b/.devops/aws/src/stacks/api-service/db.ts @@ -58,7 +58,6 @@ type DbStackProps = StackProps & { clusterSecurityGroup: ISecurityGroup; kubernetesClusterAttributes: VersionAgnosticClusterAttributes; scyllaSecretArn: string; - snowflakeSecretArn: string; }; /** @@ -76,7 +75,6 @@ export class ApiDbClusterStack extends Stack { numInstances, provisionProdLevelsOfCompute, scyllaSecretArn, - snowflakeSecretArn, ...stackProps } = props; @@ -482,9 +480,6 @@ export class ApiDbClusterStack extends Stack { secrets: { API_SERVER_DATABASE_USER: [this.rdsConnectionSecretArn, 'username'], API_SERVER_DATABASE_PASSWORD: [this.rdsConnectionSecretArn, 'password'], - SNOWFLAKE_USERNAME: [snowflakeSecretArn, 'username'], - SNOWFLAKE_PASSWORD: [snowflakeSecretArn, 'password'], - SNOWFLAKE_DB_NAME: [snowflakeSecretArn, 'database'], SCYLLA_HOSTS: [scyllaSecretArn, 'hosts'], SCYLLA_USERNAME: [scyllaSecretArn, 'username'], SCYLLA_PASSWORD: [scyllaSecretArn, 'password'], @@ -493,7 +488,6 @@ export class ApiDbClusterStack extends Stack { API_SERVER_DATABASE_HOST: rdsCluster.clusterEndpoint.hostname, API_SERVER_DATABASE_PORT: rdsCluster.clusterEndpoint.port.toString(), API_SERVER_DATABASE_NAME: defaultDatabaseName, - SNOWFLAKE_WAREHOUSE: 'MIGRATIONS', SCYLLA_LOCAL_DATACENTER: 'AWS_US_EAST_2', SCYLLA_KEYSPACE: 'item_investigation_service', SCYLLA_REPLICATION_CLASS: 'NetworkTopologyStrategy', @@ -501,7 +495,7 @@ export class ApiDbClusterStack extends Stack { SCYLLA_COMPACTION_STRATEGY: 'IncrementalCompactionStrategy', SCYLLA_HAS_ENTERPRISE_FEATURES: 'true', }, - dbArgs: ['api-server-pg', 'snowflake', 'scylla'], + dbArgs: ['api-server-pg', 'scylla'], deploymentEnvironment: stage, vpc, }); diff --git a/.devops/aws/src/stacks/api-service/jobs_workers.ts b/.devops/aws/src/stacks/api-service/jobs_workers.ts index 2c71922..a78d089 100644 --- a/.devops/aws/src/stacks/api-service/jobs_workers.ts +++ b/.devops/aws/src/stacks/api-service/jobs_workers.ts @@ -1,9 +1,6 @@ -import { Duration, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib'; +import { Stack, StackProps } from 'aws-cdk-lib'; import { DockerImageAsset, Platform } from 'aws-cdk-lib/aws-ecr-assets'; import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; -import * as s3 from 'aws-cdk-lib/aws-s3'; -import * as s3n from 'aws-cdk-lib/aws-s3-notifications'; -import { Queue } from 'aws-cdk-lib/aws-sqs'; import { App as Cdk8sApp } from 'cdk8s'; import { Construct } from 'constructs'; import _ from 'lodash'; @@ -19,8 +16,6 @@ import { repoRootDir, ScyllaEnvVars, scyllaEnvVars, - SnowflakeEnvVar, - snowflakeEnvVars, topicSchemaIds, } from '../../constants.js'; import { @@ -46,25 +41,20 @@ type WorkersStackProps = StackProps & { secrets: SecretsMap< | PgEnvVar | RedisEnvVar - | SnowflakeEnvVar | 'SENDGRID_API_KEY' | KafkaSecretEnvVar | ScyllaEnvVars - | 'KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_USERNAME' - | 'KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_PASSWORD' | 'KAFKA_API_SERVICE_ACCOUNT_USERNAME' | 'KAFKA_API_SERVICE_ACCOUNT_PASSWORD' >; stage: DeploymentEnvironmentName; provisionProdLevelsOfCompute: boolean; rdsReadOnlyClusterHost: string; - snowpipeQueueArn?: string; bullmqTokenSecretArn?: string; kafkaHosts: { broker: string; schemaRegistry: string; }; - statefulResourceRemovalPolicy: RemovalPolicy; enableDatadog: boolean; }; @@ -80,10 +70,8 @@ export class JobsAndWorkersStack extends Stack { provisionProdLevelsOfCompute, namespaceName, secrets, - snowpipeQueueArn, rdsReadOnlyClusterHost, kafkaHosts, - statefulResourceRemovalPolicy, ...stackProps } = props; super(scope, id, stackProps); @@ -107,27 +95,13 @@ export class JobsAndWorkersStack extends Stack { platform: Platform.LINUX_AMD64, }); - // A service account to grant our workers access to the needed secrets and - // to our s3 bucket for dumping tables to snowflake and to the SQS queue. + // A service account to grant our workers access to the needed secrets. // For now, we'll make one service account for all workers. const serviceAccount = cluster.addServiceAccount('WorkerServiceAccount', { namespace: namespaceName, name: 'worker-service-account', }); - // S3 Bucket used to store data that'll be ingested by snowflake. - const snowflakeIngestBucket = new s3.Bucket(this, 'SnowflakeIngestBucket', { - removalPolicy: statefulResourceRemovalPolicy, - publicReadAccess: false, - lifecycleRules: [ - { - enabled: true, - expiration: Duration.days(7), - }, - ], - }); - snowflakeIngestBucket.grantReadWrite(serviceAccount); - // Also grant it permission to read secrets, because we need to read signing // keys in any workers that can (however indirectly) make a signed request // to our customers' endpoints (e.g. for partial items and actions). @@ -141,62 +115,6 @@ export class JobsAndWorkersStack extends Stack { }), ); - if (snowpipeQueueArn) { - snowflakeIngestBucket.addEventNotification( - s3.EventType.OBJECT_CREATED, - new s3n.SqsDestination( - Queue.fromQueueArn(this, 'SnowpipeQueue', snowpipeQueueArn), - ), - ); - } - - new CoopWorkerDeployment(new Cdk8sApp(), 'kafka-snowflake-worker', { - workerName: 'SnowflakeIngestionToS3Worker', - uiUrl: props.uiUrl, - imageUrl: workerPodImage.imageUri, - allowedNodeTypes: deployedIntelNodeTypes, - namespace: namespaceName, - resources: { - requests: { - cpu: Quantity.fromString('400m'), - memory: Quantity.fromString('3Gi'), - }, - limits: { - cpu: Quantity.fromString('800m'), - memory: Quantity.fromString('6Gi'), - }, - }, - nodeJsMemoryOptions: { - nodeExternalMemoryPercent: 0.33, - }, - secretsHandler: new KubernetesSecretsIntegration( - this, - 'KafkaSnowflakeWorkerSecrets', - { - serviceAccount, - secrets: { - ..._.pick(secrets, kafkaSecretEnvVars), - KAFKA_BROKER_USERNAME: - secrets.KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_USERNAME, - KAFKA_BROKER_PASSWORD: - secrets.KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_PASSWORD, - }, - }, - ), - // On staging, only run 1 replicas so that we can launch other replicas - // locally for testing, and they'll actually get assigned to a partition. - targetReplicas: props.provisionProdLevelsOfCompute ? 4 : 1, - stage, - env: { - SNOWFLAKE_S3_BUCKET_NAME: snowflakeIngestBucket.bucketName, - SNOWFLAKE_S3_BUCKET_REGION: this.region, - KAFKA_BROKER_HOST: kafkaHosts.broker, - KAFKA_SCHEMA_REGISTRY_HOST: kafkaHosts.schemaRegistry, - ..._.mapValues(topicSchemaIds[stage], String), - }, - dependencies: [workerPodImage, snowflakeIngestBucket], - }).addToCluster(cluster); - new CoopWorkerDeployment(new Cdk8sApp(), 'item-processing-worker', { workerName: 'ItemProcessingWorker', uiUrl: props.uiUrl, @@ -362,18 +280,15 @@ export class JobsAndWorkersStack extends Stack { namespace: namespaceName, concurrencyPolicy: 'Forbid', schedule: '0 * * * *', - // This worker queries snowflake for rule pass rates, sets alarm status - // in pg, and maybe sends emails when an alarm occurs, so it needs all those secrets. + // This worker queries the data warehouse for rule pass rates, sets alarm + // status in pg, and maybe sends emails when an alarm occurs, so it needs + // all those secrets. secretsHandler: new KubernetesSecretsIntegration( this, 'DetectRulePassRateAnomaliesJobSecrets', { serviceAccount, - secrets: pick(secrets, [ - ...pgEnvVars, - ...snowflakeEnvVars, - 'SENDGRID_API_KEY', - ]), + secrets: pick(secrets, [...pgEnvVars, 'SENDGRID_API_KEY']), }, ), stage, @@ -414,7 +329,6 @@ export class JobsAndWorkersStack extends Stack { ...scyllaEnvVars, ...pgEnvVars, ...redisEnvVars, - ...snowflakeEnvVars, 'OPEN_AI_API_KEY', ]), KAFKA_BROKER_USERNAME: secrets.KAFKA_API_SERVICE_ACCOUNT_USERNAME, @@ -461,7 +375,6 @@ export class JobsAndWorkersStack extends Stack { secrets: pick(secrets, [ ...pgEnvVars, ...scyllaEnvVars, - ...snowflakeEnvVars, ...redisEnvVars, ]), }, diff --git a/.devops/aws/src/stacks/app_pipeline.ts b/.devops/aws/src/stacks/app_pipeline.ts index ee34601..28f8d48 100644 --- a/.devops/aws/src/stacks/app_pipeline.ts +++ b/.devops/aws/src/stacks/app_pipeline.ts @@ -57,15 +57,11 @@ export type AppPipelineStackProps = cdk.StackProps & { }; type EnvSpecificArns = { - snowflakeSecret: string; sessionSecret: string; redisSecret: string; kafkaSchemaRegistrySecret: string; kafkaApiServiceAccountSecret: string; - kafkaSnowflakeWorkerServiceAccountSecret: string; - snowpipeQueue?: string; datadogRedisSecret: string; - datadogSnowflakeSecret: string; scyllaSecret: string; graphqlOpaqueScalarSecret: string; }; @@ -220,7 +216,6 @@ class DeploymentEnv extends Stage { clusterSecurityGroup: clusterStack.cluster.clusterSecurityGroup, kubernetesClusterAttributes: clusterAttributes, scyllaSecretArn: props.arns.scyllaSecret, - snowflakeSecretArn: props.arns.snowflakeSecret, }); const rdsReadOnlyClusterHost = this.dbStack.rdsReadOnlyClusterHost; @@ -273,9 +268,6 @@ class DeploymentEnv extends Stage { DATABASE_NAME: [this.dbStack.rdsConnectionSecretArn, 'dbname'], DATABASE_USER: [this.dbStack.rdsConnectionSecretArn, 'username'], DATABASE_PASSWORD: [this.dbStack.rdsConnectionSecretArn, 'password'], - SNOWFLAKE_USERNAME: [arns.snowflakeSecret, 'username'], - SNOWFLAKE_PASSWORD: [arns.snowflakeSecret, 'password'], - SNOWFLAKE_DB_NAME: [arns.snowflakeSecret, 'database'], GOOGLE_TRANSLATE_API_KEY: [ 'arn:aws:secretsmanager:us-east-2:361188080279:secret:prod/Api/GoogleTranslateApiKey-MCdqWJ', ], @@ -288,14 +280,6 @@ class DeploymentEnv extends Stage { arns.kafkaApiServiceAccountSecret, 'API_SECRET', ], - KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_USERNAME: [ - arns.kafkaSnowflakeWorkerServiceAccountSecret, - 'API_KEY', - ], - KAFKA_SNOWFLAKE_INGEST_SERVICE_ACCOUNT_PASSWORD: [ - arns.kafkaSnowflakeWorkerServiceAccountSecret, - 'API_SECRET', - ], KAFKA_SCHEMA_REGISTRY_USERNAME: [ arns.kafkaSchemaRegistrySecret, 'USERNAME', @@ -320,9 +304,7 @@ class DeploymentEnv extends Stage { datadogApiSecret: globalArns.datadogSecret, stage: id, datadogRedisSecret: arns.datadogRedisSecret, - datadogSnowflakeSecret: arns.datadogSnowflakeSecret, scyllaSecret: arns.scyllaSecret, - monitorSnowflakeAccountUsage: id === 'Prod', tracingSamplingPercentage: props.tracingSamplingPercentage, }) : undefined; @@ -453,9 +435,7 @@ class DeploymentEnv extends Stage { clusterAttributes, secrets, kafkaHosts, - snowpipeQueueArn: arns.snowpipeQueue, rdsReadOnlyClusterHost, - statefulResourceRemovalPolicy, provisionProdLevelsOfCompute, enableDatadog: props.enableDatadog, }); diff --git a/.devops/aws/src/stacks/datadog.ts b/.devops/aws/src/stacks/datadog.ts index 9090e77..43d4024 100644 --- a/.devops/aws/src/stacks/datadog.ts +++ b/.devops/aws/src/stacks/datadog.ts @@ -20,9 +20,7 @@ type ApiStackProps = StackProps & { datadogApiSecret: string; // currently unused stage: DeploymentEnvironmentName; datadogRedisSecret: string; - datadogSnowflakeSecret: string; scyllaSecret: string; - monitorSnowflakeAccountUsage: boolean; // we only want to do this in one environment tracingSamplingPercentage: string; }; @@ -90,11 +88,7 @@ export class DatadogStack extends Stack { 'secretsmanager:GetSecretValue', 'secretsmanager:DescribeSecret', ], - resources: [ - props.datadogRedisSecret, - props.datadogSnowflakeSecret, - props.scyllaSecret, - ], + resources: [props.datadogRedisSecret, props.scyllaSecret], }), ); @@ -153,10 +147,6 @@ export class DatadogStack extends Stack { const secretVolumeName = 'secret-volume'; const datadogSecretsProviderName = 'datadog-secret-provider'; - const snowflakeUsernameFilename = 'snowflake-username'; - const snowflakePasswordFilename = 'snowflake-password'; - const snowflakeRoleFilename = 'snowflake-role'; - const snowflakeAccountFilename = 'snowflake-account'; const redisUsernameFilename = 'redis-username'; const redisPasswordFilename = 'redis-password'; const redisHostFilename = 'redis-host'; @@ -196,27 +186,6 @@ export class DatadogStack extends Stack { }, ], }, - { - objectName: props.datadogSnowflakeSecret, - jmesPath: [ - { - path: 'username', - objectAlias: snowflakeUsernameFilename, - }, - { - path: 'password', - objectAlias: snowflakePasswordFilename, - }, - { - path: 'account', - objectAlias: snowflakeAccountFilename, - }, - { - path: 'role', - objectAlias: snowflakeRoleFilename, - }, - ], - }, { objectName: props.scyllaSecret, jmesPath: [ @@ -234,18 +203,6 @@ export class DatadogStack extends Stack { const secretsMountPath = '/etc/secrets'; - const snowflakeInstances = []; - - props.monitorSnowflakeAccountUsage && - // this config is for monitoring account level usage and we only want to do that once (in prod) - snowflakeInstances.push({ - account: `ENC[file@${secretsMountPath}/${snowflakeAccountFilename}]`, - username: `ENC[file@${secretsMountPath}/${snowflakeUsernameFilename}]`, - password: `ENC[file@${secretsMountPath}/${snowflakePasswordFilename}]`, - role: `ENC[file@${secretsMountPath}/${snowflakeRoleFilename}]`, - min_collection_interval: 3600, - }); - const datadogAgent = cluster.addHelmChart('DatadogAgent', { chart: 'datadog', release: releaseName, @@ -454,10 +411,6 @@ export class DatadogStack extends Stack { }, ], }), - 'snowflake.yaml': jsonToPrettyYaml.stringify({ - cluster_check: true, - instances: snowflakeInstances, - }), 'scylla.yaml': jsonToPrettyYaml.stringify({ cluster_check: true, instances: [ diff --git a/.devops/cdktf/src/kafka/kafka.ts b/.devops/cdktf/src/kafka/kafka.ts index 06ee9e5..45ab448 100644 --- a/.devops/cdktf/src/kafka/kafka.ts +++ b/.devops/cdktf/src/kafka/kafka.ts @@ -271,59 +271,6 @@ export class KafkaStack extends TerraformStack { }), }); - new Schema(this, 'SNOWFLAKE_INGEST_EVENTS-key', { - format: 'AVRO', - subjectName: 'SNOWFLAKE_INGEST_EVENTS-key', - schemaRegistryCluster: { id: schemaRegistryCluster.id }, - restEndpoint: schemaRegistryCluster.restEndpoint, - recreateOnUpdate: true, - credentials: { - key: schemaRegistryApiKey.id, - secret: schemaRegistryApiKey.secret, - }, - schema: JSON.stringify({ - type: 'record', - name: 'CustomerEndUserId', - doc: "This schema identifies an end user (i.e., someone using an app made by one of Coop's users), _NOT_ a direct user of Coop's products.", - fields: [ - { - name: 'orgId', - type: 'string', - doc: 'The id of the Coop organization, which makes the whole record globally unique (if different Coop organizations assign users overlapping ids).', - }, - { - name: 'userId', - type: 'string', - doc: "The id that Coop's user assigned to the end-user on their platform.", - }, - ], - }), - }); - - new Schema(this, 'SNOWFLAKE_INGEST_EVENTS-value', { - format: 'AVRO', - subjectName: 'SNOWFLAKE_INGEST_EVENTS-value', - schemaRegistryCluster: { id: schemaRegistryCluster.id }, - restEndpoint: schemaRegistryCluster.restEndpoint, - recreateOnUpdate: true, - credentials: { - key: schemaRegistryApiKey.id, - secret: schemaRegistryApiKey.secret, - }, - schema: JSON.stringify({ - type: 'record', - name: 'SnowflakeRow', - fields: [ - { name: 'dataJSON', type: 'string' }, - { - name: 'recordedAt', - type: { type: 'long', logicalType: 'timestamp-millis' }, - }, - { name: 'table', type: 'string' }, - ], - }), - }); - const kafkaClusterRoleBinding = new RoleBinding( this, 'kafka-cluster-role-binding', @@ -377,19 +324,5 @@ export class KafkaStack extends TerraformStack { preventDestroy: true, }, }); - - new KafkaTopic(this, 'SNOWFLAKE_INGEST_EVENTS', { - topicName: 'SNOWFLAKE_INGEST_EVENTS', - kafkaCluster, - restEndpoint: kafkaCluster.restEndpoint, - partitionsCount: props.kafka.snowflakeIngestTopic.partitionCount, - credentials: { - key: kafkaClusterApiKey.id, - secret: kafkaClusterApiKey.secret, - }, - lifecycle: { - preventDestroy: true, - }, - }); } } diff --git a/.devops/cdktf/src/main.ts b/.devops/cdktf/src/main.ts index 0452d5c..c93050e 100644 --- a/.devops/cdktf/src/main.ts +++ b/.devops/cdktf/src/main.ts @@ -22,9 +22,6 @@ export type EnvironmentProps = StackProps & { clusterName: string; availability: string; clusterType: 'basic' | 'standard'; - snowflakeIngestTopic: { - partitionCount: number; - }; }; sourceBranch: string; lifecycle: { @@ -61,9 +58,6 @@ deployEnvironment({ environmentName: 'Staging', clusterType: 'basic', availability: 'SINGLE_ZONE', - snowflakeIngestTopic: { - partitionCount: 4, - }, }, }); @@ -86,9 +80,6 @@ deployEnvironment({ environmentName: 'Prod', clusterType: 'standard', availability: 'MULTI_ZONE', - snowflakeIngestTopic: { - partitionCount: 12, - }, }, }); diff --git a/.devops/migrator/.env.example b/.devops/migrator/.env.example index 6f2243d..68feeca 100644 --- a/.devops/migrator/.env.example +++ b/.devops/migrator/.env.example @@ -10,14 +10,6 @@ API_SERVER_DATABASE_NAME=postgres API_SERVER_DATABASE_USER=postgres API_SERVER_DATABASE_PASSWORD=postgres123 -# Snowflake Personal Account Credentials -SNOWFLAKE_USERNAME= -SNOWFLAKE_PASSWORD= -SNOWFLAKE_DB_NAME=MY_DEV_DB -SNOWFLAKE_WAREHOUSE=CI -SNOWFLAKE_ROLE=ACCOUNTADMIN -SNOWFLAKE_ACCOUNT= - CLICKHOUSE_PROTOCOL=http CLICKHOUSE_HOST=localhost CLICKHOUSE_PORT=8123 diff --git a/.devops/migrator/.gitignore b/.devops/migrator/.gitignore index cea5f55..e69de29 100644 --- a/.devops/migrator/.gitignore +++ b/.devops/migrator/.gitignore @@ -1 +0,0 @@ -snowflake.log diff --git a/.devops/migrator/package-lock.json b/.devops/migrator/package-lock.json index 13aa8a0..039e8c1 100644 --- a/.devops/migrator/package-lock.json +++ b/.devops/migrator/package-lock.json @@ -19,7 +19,6 @@ "lodash": "^4.17.21", "pg": "^8.7.1", "sequelize": "^6.32.1", - "snowflake-sdk": "^2.3.3", "ts-node": "^10.9.2", "uid": "^2.0.0", "umzug": "^3.0.0", @@ -31,83 +30,6 @@ "typescript": "^5.2.2" } }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/crc32c": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", @@ -326,122 +248,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1005.0.tgz", - "integrity": "sha512-EVl5IElgh7l9M242JYZGBt2AtdylpSKEFiEHBfB2OKuh2es19IQkDNfLFGfzThXWbapfBjXuB0zs9nplNviOSQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/credential-provider-node": "^3.972.19", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.7", - "@aws-sdk/middleware-expect-continue": "^3.972.7", - "@aws-sdk/middleware-flexible-checksums": "^3.973.5", - "@aws-sdk/middleware-host-header": "^3.972.7", - "@aws-sdk/middleware-location-constraint": "^3.972.7", - "@aws-sdk/middleware-logger": "^3.972.7", - "@aws-sdk/middleware-recursion-detection": "^3.972.7", - "@aws-sdk/middleware-sdk-s3": "^3.972.19", - "@aws-sdk/middleware-ssec": "^3.972.7", - "@aws-sdk/middleware-user-agent": "^3.972.20", - "@aws-sdk/region-config-resolver": "^3.972.7", - "@aws-sdk/signature-v4-multi-region": "^3.996.7", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-endpoints": "^3.996.4", - "@aws-sdk/util-user-agent-browser": "^3.972.7", - "@aws-sdk/util-user-agent-node": "^3.973.5", - "@smithy/config-resolver": "^4.4.10", - "@smithy/core": "^3.23.9", - "@smithy/eventstream-serde-browser": "^4.2.11", - "@smithy/eventstream-serde-config-resolver": "^4.3.11", - "@smithy/eventstream-serde-node": "^4.2.11", - "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/hash-blob-browser": "^4.2.12", - "@smithy/hash-node": "^4.2.11", - "@smithy/hash-stream-node": "^4.2.11", - "@smithy/invalid-dependency": "^4.2.11", - "@smithy/md5-js": "^4.2.11", - "@smithy/middleware-content-length": "^4.2.11", - "@smithy/middleware-endpoint": "^4.4.23", - "@smithy/middleware-retry": "^4.4.40", - "@smithy/middleware-serde": "^4.2.12", - "@smithy/middleware-stack": "^4.2.11", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.39", - "@smithy/util-defaults-mode-node": "^4.2.42", - "@smithy/util-endpoints": "^3.3.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-retry": "^4.2.11", - "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.11", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.1005.0.tgz", - "integrity": "sha512-TCCWkROc6akngO5595RBmD3Zeq9CFtoZa3TsugyvOoDEd0c/FFOnoAZ7TdTe3MLuvkbXH5yvN6hLyLQgytNIAg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/credential-provider-node": "^3.972.19", - "@aws-sdk/middleware-host-header": "^3.972.7", - "@aws-sdk/middleware-logger": "^3.972.7", - "@aws-sdk/middleware-recursion-detection": "^3.972.7", - "@aws-sdk/middleware-user-agent": "^3.972.20", - "@aws-sdk/region-config-resolver": "^3.972.7", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-endpoints": "^3.996.4", - "@aws-sdk/util-user-agent-browser": "^3.972.7", - "@aws-sdk/util-user-agent-node": "^3.973.5", - "@smithy/config-resolver": "^4.4.10", - "@smithy/core": "^3.23.9", - "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/hash-node": "^4.2.11", - "@smithy/invalid-dependency": "^4.2.11", - "@smithy/middleware-content-length": "^4.2.11", - "@smithy/middleware-endpoint": "^4.4.23", - "@smithy/middleware-retry": "^4.4.40", - "@smithy/middleware-serde": "^4.2.12", - "@smithy/middleware-stack": "^4.2.11", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.39", - "@smithy/util-defaults-mode-node": "^4.2.42", - "@smithy/util-endpoints": "^3.3.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-retry": "^4.2.11", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/core": { "version": "3.973.19", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.19.tgz", @@ -466,19 +272,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.4.tgz", - "integrity": "sha512-HKZIZLbRyvzo/bXZU7Zmk6XqU+1C9DjI56xd02vwuDIxedxBEqP17t9ExhbP9QFeNq/a3l9GOcyirFXxmbDhmw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { "version": "3.972.11", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.11.tgz", @@ -686,82 +479,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/ec2-metadata-service": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.1005.0.tgz", - "integrity": "sha512-3+6X75C5m4AZohyfIITmKHLrYzLwdOsXj9Bb7M+yejELl2WNau8X46+jehIkSH57Iu5uyFbfhanYwp6LmaD6jw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.5", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.17", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.7.tgz", - "integrity": "sha512-goX+axlJ6PQlRnzE2bQisZ8wVrlm6dXJfBzMJhd8LhAIBan/w1Kl73fJnalM/S+18VnpzIHumyV6DtgmvqG5IA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.7.tgz", - "integrity": "sha512-mvWqvm61bmZUKmmrtl2uWbokqpenY3Mc3Jf4nXB/Hse6gWxLPaCQThmhPBDzsPSV8/Odn8V6ovWt3pZ7vy4BFQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.5", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.973.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.973.5.tgz", - "integrity": "sha512-Dp3hqE5W6hG8HQ3Uh+AINx9wjjqYmFHbxede54sGj3akx/haIQrkp85lNdTdC+ouNUcSYNiuGkzmyDREfHX1Gg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/crc64-nvme": "^3.972.4", - "@aws-sdk/types": "^3.973.5", - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.972.7", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.7.tgz", @@ -777,20 +494,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.7.tgz", - "integrity": "sha512-vdK1LJfffBp87Lj0Bw3WdK1rJk9OLDYdQpqoKgmpIZPe+4+HawZ6THTbvjhJt4C4MNnRrHTKHQjkwBiIpDBoig==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.5", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.972.7", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.7.tgz", @@ -839,58 +542,19 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.19", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.19.tgz", - "integrity": "sha512-/CtOHHVFg4ZuN6CnLnYkrqWgVEnbOBC4kNiKa+4fldJ9cioDt3dD/f5vpq0cWLOXwmGL2zgVrVxNhjxWpxNMkg==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.20", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.20.tgz", + "integrity": "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-arn-parser": "^3.972.3", + "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", - "@smithy/node-config-provider": "^4.3.11", "@smithy/protocol-http": "^5.3.11", - "@smithy/signature-v4": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.7.tgz", - "integrity": "sha512-G9clGVuAml7d8DYzY6DnRi7TIIDRvZ3YpqJPz/8wnWS5fYx/FNWNmkO6iJVlVkQg9BfeMzd+bVPtPJOvC4B+nQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.5", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.20.tgz", - "integrity": "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-endpoints": "^3.996.4", - "@smithy/core": "^3.23.9", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-retry": "^4.2.11", + "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" }, "engines": { @@ -962,23 +626,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.7.tgz", - "integrity": "sha512-mYhh7FY+7OOqjkYkd6+6GgJOsXK1xBWmuR+c5mxJPj2kr5TBNeZq+nUvE9kANWAux5UxDVrNOSiEM/wlHzC3Lg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.19", - "@aws-sdk/types": "^3.973.5", - "@smithy/protocol-http": "^5.3.11", - "@smithy/signature-v4": "^5.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/token-providers": { "version": "3.1005.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1005.0.tgz", @@ -1010,18 +657,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.996.4", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.4.tgz", @@ -1123,548 +758,378 @@ "node": ">=18.0.0" } }, - "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", + "node_modules/@clickhouse/client": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.14.0.tgz", + "integrity": "sha512-co2spjR7wZoZ3Ck0H/jv76bpiuO3oJHtOmq9/gxFiod2DcT9NFg01u/hXcG8MJFnEJuMB6e3vGqS6IOnLwHqRw==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.6.2" + "@clickhouse/client-common": "1.14.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=16" } }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "license": "MIT", + "node_modules/@clickhouse/client-common": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.14.0.tgz", + "integrity": "sha512-CyUcv2iCkZ1A++vmOSufYRpHR3aAWVfbrWed7ATzf0yyx/BW/2SEqlL07vBpSRa3BIkQe/DSOHVv8JkWZpUOwQ==", + "license": "Apache-2.0" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=20.0.0" + "node": ">=12" } }, - "node_modules/@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": ">=20.0.0" + "node": ">=6.0.0" } }, - "node_modules/@azure/core-http-compat": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz", - "integrity": "sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==", - "license": "MIT", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-client": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0" - }, - "engines": { - "node": ">=20.0.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, + "node_modules/@lukeed/csprng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", + "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==", "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", - "license": "MIT", + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "optional": true, "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "sparse-bitfield": "^3.0.3" } }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", - "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", - "license": "MIT", + "node_modules/@roostorg/db-migrator": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@roostorg/db-migrator/-/db-migrator-1.0.8.tgz", + "integrity": "sha512-JtFdbAN0ezmBhMqEZ6FK5+GIQNJIiB8/5klSgp3+xifyzXfFKmGIJL9zN7j8cVcBdfNPatw+Qavah/jnFFHlHA==", + "license": "ISC", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" + "@total-typescript/ts-reset": "^0.5.1", + "@types/umzug": "^2.3.3", + "@types/yargs": "^17.0.24", + "cassandra-driver": "^4.8.0", + "sequelize": "^6.32.1", + "umzug": "^3.0.0", + "yargs": "^16.2.0" } }, - "node_modules/@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", - "license": "MIT", + "node_modules/@rushstack/ts-command-line": { + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.6.tgz", + "integrity": "sha512-Y3GkUag39sTIlukDg9mUp8MCHrrlJ27POrBNRQGc/uF+VVgX8M7zMzHch5zP6O1QVquWgD7Engdpn2piPYaS/g==", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" } }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "license": "MIT", + "node_modules/@smithy/abort-controller": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.11.tgz", + "integrity": "sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==", + "license": "Apache-2.0", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/core-xml": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.5.0.tgz", - "integrity": "sha512-D/sdlJBMJfx7gqoj66PKVmhDDaU6TKA49ptcolxdas29X7AfvLTmfAGLjAcIMBK7UZ2o4lygHIqVckOlQU3xWw==", - "license": "MIT", + "node_modules/@smithy/config-resolver": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.10.tgz", + "integrity": "sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==", + "license": "Apache-2.0", "dependencies": { - "fast-xml-parser": "^5.0.7", - "tslib": "^2.8.1" + "@smithy/node-config-provider": "^4.3.11", + "@smithy/types": "^4.13.0", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-endpoints": "^3.3.2", + "@smithy/util-middleware": "^4.2.11", + "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/identity": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", - "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", - "license": "MIT", + "node_modules/@smithy/core": { + "version": "3.23.9", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.9.tgz", + "integrity": "sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ==", + "license": "Apache-2.0", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", - "@azure/core-rest-pipeline": "^1.17.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.5.0", - "open": "^10.1.0", - "tslib": "^2.2.0" + "@smithy/middleware-serde": "^4.2.12", + "@smithy/protocol-http": "^5.3.11", + "@smithy/types": "^4.13.0", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-middleware": "^4.2.11", + "@smithy/util-stream": "^4.5.17", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/identity/node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "license": "MIT", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.11.tgz", + "integrity": "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==", + "license": "Apache-2.0", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "@smithy/node-config-provider": "^4.3.11", + "@smithy/property-provider": "^4.2.11", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.11", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "license": "MIT", + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.13.tgz", + "integrity": "sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==", + "license": "Apache-2.0", "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", + "@smithy/protocol-http": "^5.3.11", + "@smithy/querystring-builder": "^4.2.11", + "@smithy/types": "^4.13.0", + "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/msal-browser": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.1.tgz", - "integrity": "sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==", - "license": "MIT", + "node_modules/@smithy/hash-node": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.11.tgz", + "integrity": "sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==", + "license": "Apache-2.0", "dependencies": { - "@azure/msal-common": "15.14.1" + "@smithy/types": "^4.13.0", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "15.14.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.1.tgz", - "integrity": "sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/msal-node": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.6.tgz", - "integrity": "sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==", - "license": "MIT", + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.11.tgz", + "integrity": "sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==", + "license": "Apache-2.0", "dependencies": { - "@azure/msal-common": "15.14.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" + "node": ">=18.0.0" } }, - "node_modules/@azure/storage-blob": { - "version": "12.26.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.26.0.tgz", - "integrity": "sha512-SriLPKezypIsiZ+TtlFfE46uuBIap2HeaQVS78e1P7rz5OSbq0rsd52WE1mC5f7vAeLiXqv7I7oRhL3WFZEw3Q==", - "license": "MIT", + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", + "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", + "license": "Apache-2.0", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.4.0", - "@azure/core-client": "^1.6.2", - "@azure/core-http-compat": "^2.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.1.1", - "@azure/core-rest-pipeline": "^1.10.1", - "@azure/core-tracing": "^1.1.2", - "@azure/core-util": "^1.6.1", - "@azure/core-xml": "^1.4.3", - "@azure/logger": "^1.0.0", - "events": "^3.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@azure/storage-blob/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/@clickhouse/client": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.14.0.tgz", - "integrity": "sha512-co2spjR7wZoZ3Ck0H/jv76bpiuO3oJHtOmq9/gxFiod2DcT9NFg01u/hXcG8MJFnEJuMB6e3vGqS6IOnLwHqRw==", + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.11.tgz", + "integrity": "sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==", "license": "Apache-2.0", "dependencies": { - "@clickhouse/client-common": "1.14.0" + "@smithy/protocol-http": "^5.3.11", + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" - } - }, - "node_modules/@clickhouse/client-common": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.14.0.tgz", - "integrity": "sha512-CyUcv2iCkZ1A++vmOSufYRpHR3aAWVfbrWed7ATzf0yyx/BW/2SEqlL07vBpSRa3BIkQe/DSOHVv8JkWZpUOwQ==", - "license": "Apache-2.0" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" + "node": ">=18.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.23", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.23.tgz", + "integrity": "sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@smithy/core": "^3.23.9", + "@smithy/middleware-serde": "^4.2.12", + "@smithy/node-config-provider": "^4.3.11", + "@smithy/shared-ini-file-loader": "^4.4.6", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.11", + "@smithy/util-middleware": "^4.2.11", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "node": ">=18.0.0" } }, - "node_modules/@google-cloud/paginator": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", - "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "node_modules/@smithy/middleware-retry": { + "version": "4.4.40", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.40.tgz", + "integrity": "sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==", "license": "Apache-2.0", "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@smithy/node-config-provider": "^4.3.11", + "@smithy/protocol-http": "^5.3.11", + "@smithy/service-error-classification": "^4.2.11", + "@smithy/smithy-client": "^4.12.3", + "@smithy/types": "^4.13.0", + "@smithy/util-middleware": "^4.2.11", + "@smithy/util-retry": "^4.2.11", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", - "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "node": ">=18.0.0" } }, - "node_modules/@google-cloud/storage": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz", - "integrity": "sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==", + "node_modules/@smithy/middleware-serde": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.12.tgz", + "integrity": "sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==", "license": "Apache-2.0", "dependencies": { - "@google-cloud/paginator": "^5.0.0", - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "<4.1.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "duplexify": "^4.1.3", - "fast-xml-parser": "^5.3.4", - "gaxios": "^6.0.2", - "google-auth-library": "^9.6.3", - "html-entities": "^2.5.2", - "mime": "^3.0.0", - "p-limit": "^3.0.1", - "retry-request": "^7.0.0", - "teeny-request": "^9.0.0", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@smithy/protocol-http": "^5.3.11", + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@smithy/middleware-stack": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.11.tgz", + "integrity": "sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", + "node_modules/@smithy/node-config-provider": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.11.tgz", + "integrity": "sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==", + "license": "Apache-2.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@smithy/property-provider": "^4.2.11", + "@smithy/shared-ini-file-loader": "^4.4.6", + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", + "node_modules/@smithy/node-http-handler": { + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.14.tgz", + "integrity": "sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==", + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^6.0.1" + "@smithy/abort-controller": "^4.2.11", + "@smithy/protocol-http": "^5.3.11", + "@smithy/querystring-builder": "^4.2.11", + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", + "node_modules/@smithy/property-provider": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.11.tgz", + "integrity": "sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": ">=6.0.0" + "node": ">=18.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@smithy/protocol-http": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.11.tgz", + "integrity": "sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", - "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==", + "@smithy/types": "^4.13.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", - "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", - "optional": true, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.11.tgz", + "integrity": "sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==", + "license": "Apache-2.0", "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, + "@smithy/types": "^4.13.0", + "@smithy/util-uri-escape": "^4.2.2", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=14" - } - }, - "node_modules/@roostorg/db-migrator": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@roostorg/db-migrator/-/db-migrator-1.0.8.tgz", - "integrity": "sha512-JtFdbAN0ezmBhMqEZ6FK5+GIQNJIiB8/5klSgp3+xifyzXfFKmGIJL9zN7j8cVcBdfNPatw+Qavah/jnFFHlHA==", - "license": "ISC", - "dependencies": { - "@total-typescript/ts-reset": "^0.5.1", - "@types/umzug": "^2.3.3", - "@types/yargs": "^17.0.24", - "cassandra-driver": "^4.8.0", - "sequelize": "^6.32.1", - "umzug": "^3.0.0", - "yargs": "^16.2.0" - } - }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.10.6", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.6.tgz", - "integrity": "sha512-Y3GkUag39sTIlukDg9mUp8MCHrrlJ27POrBNRQGc/uF+VVgX8M7zMzHch5zP6O1QVquWgD7Engdpn2piPYaS/g==", - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "node": ">=18.0.0" } }, - "node_modules/@smithy/abort-controller": { + "node_modules/@smithy/querystring-parser": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.11.tgz", - "integrity": "sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.11.tgz", + "integrity": "sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.0", @@ -1674,107 +1139,87 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz", - "integrity": "sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==", + "node_modules/@smithy/service-error-classification": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.11.tgz", + "integrity": "sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.6.2" + "@smithy/types": "^4.13.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz", - "integrity": "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.6.tgz", + "integrity": "sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^4.3.2", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.10.tgz", - "integrity": "sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-endpoints": "^3.3.2", - "@smithy/util-middleware": "^4.2.11", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "3.23.9", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.9.tgz", - "integrity": "sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ==", + "node_modules/@smithy/signature-v4": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.11.tgz", + "integrity": "sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.12", + "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.11", - "@smithy/util-stream": "^4.5.17", + "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", - "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.11.tgz", - "integrity": "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==", + "node_modules/@smithy/smithy-client": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.3.tgz", + "integrity": "sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.11", - "@smithy/property-provider": "^4.2.11", + "@smithy/core": "^3.23.9", + "@smithy/middleware-endpoint": "^4.4.23", + "@smithy/middleware-stack": "^4.2.11", + "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", + "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.11.tgz", - "integrity": "sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w==", + "node_modules/@smithy/types": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", + "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { + "node_modules/@smithy/url-parser": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.11.tgz", - "integrity": "sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA==", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.11.tgz", + "integrity": "sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.11", + "@smithy/querystring-parser": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, @@ -1782,113 +1227,109 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.11.tgz", - "integrity": "sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA==", + "node_modules/@smithy/util-base64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", + "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.11.tgz", - "integrity": "sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", + "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.11", - "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.11.tgz", - "integrity": "sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q==", + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", + "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.11", - "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.13", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.13.tgz", - "integrity": "sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==", + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", + "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.11", - "@smithy/querystring-builder": "^4.2.11", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.2", + "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.12.tgz", - "integrity": "sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ==", + "node_modules/@smithy/util-config-provider": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", + "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^5.2.2", - "@smithy/chunked-blob-reader-native": "^4.2.3", - "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.11.tgz", - "integrity": "sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.39", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.39.tgz", + "integrity": "sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==", "license": "Apache-2.0", "dependencies": { + "@smithy/property-provider": "^4.2.11", + "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.11.tgz", - "integrity": "sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ==", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.42", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.42.tgz", + "integrity": "sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==", "license": "Apache-2.0", "dependencies": { + "@smithy/config-resolver": "^4.4.10", + "@smithy/credential-provider-imds": "^4.2.11", + "@smithy/node-config-provider": "^4.3.11", + "@smithy/property-provider": "^4.2.11", + "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.11.tgz", - "integrity": "sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==", + "node_modules/@smithy/util-endpoints": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.2.tgz", + "integrity": "sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==", "license": "Apache-2.0", "dependencies": { + "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, @@ -1896,10 +1337,10 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/is-array-buffer": { + "node_modules/@smithy/util-hex-encoding": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", - "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", + "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1908,124 +1349,84 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/md5-js": { + "node_modules/@smithy/util-middleware": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.11.tgz", - "integrity": "sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng==", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.11.tgz", + "integrity": "sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length": { + "node_modules/@smithy/util-retry": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.11.tgz", - "integrity": "sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.23", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.23.tgz", - "integrity": "sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.23.9", - "@smithy/middleware-serde": "^4.2.12", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/shared-ini-file-loader": "^4.4.6", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "@smithy/util-middleware": "^4.2.11", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.40", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.40.tgz", - "integrity": "sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.11.tgz", + "integrity": "sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", "@smithy/service-error-classification": "^4.2.11", - "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-retry": "^4.2.11", - "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.12.tgz", - "integrity": "sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==", + "node_modules/@smithy/util-stream": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.17.tgz", + "integrity": "sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.11", + "@smithy/fetch-http-handler": "^5.3.13", + "@smithy/node-http-handler": "^4.4.14", "@smithy/types": "^4.13.0", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.11.tgz", - "integrity": "sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==", + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", + "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.11.tgz", - "integrity": "sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==", + "node_modules/@smithy/util-utf8": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", + "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.11", - "@smithy/shared-ini-file-loader": "^4.4.6", - "@smithy/types": "^4.13.0", + "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { - "version": "4.4.14", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.14.tgz", - "integrity": "sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==", + "node_modules/@smithy/util-waiter": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.11.tgz", + "integrity": "sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, @@ -2033,1797 +1434,589 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.11.tgz", - "integrity": "sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==", + "node_modules/@smithy/uuid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", + "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.11.tgz", - "integrity": "sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } + "node_modules/@total-typescript/ts-reset": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.5.1.tgz", + "integrity": "sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ==" }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.11.tgz", - "integrity": "sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-uri-escape": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.11.tgz", - "integrity": "sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.11.tgz", - "integrity": "sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.6.tgz", - "integrity": "sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.11.tgz", - "integrity": "sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-uri-escape": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.3.tgz", - "integrity": "sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.23.9", - "@smithy/middleware-endpoint": "^4.4.23", - "@smithy/middleware-stack": "^4.2.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.17", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.11.tgz", - "integrity": "sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", - "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", - "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", - "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", - "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", - "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.39", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.39.tgz", - "integrity": "sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.42", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.42.tgz", - "integrity": "sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.4.10", - "@smithy/credential-provider-imds": "^4.2.11", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/property-provider": "^4.2.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.2.tgz", - "integrity": "sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", - "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.11.tgz", - "integrity": "sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.11.tgz", - "integrity": "sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^4.2.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.17.tgz", - "integrity": "sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", - "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", - "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.11.tgz", - "integrity": "sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.2.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/uuid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", - "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@techteamer/ocsp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@techteamer/ocsp/-/ocsp-1.0.1.tgz", - "integrity": "sha512-q4pW5wAC6Pc3JI8UePwE37CkLQ5gDGZMgjSX4MEEm4D4Di59auDQ8UNIDzC4gRnPNmmcwjpPxozq8p5pjiOmOw==", - "dependencies": { - "asn1.js": "^5.4.1", - "asn1.js-rfc2560": "^5.0.1", - "asn1.js-rfc5280": "^3.0.0", - "async": "^3.2.4", - "simple-lru-cache": "^0.0.2" - } - }, - "node_modules/@tootallnate/once": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-3.0.1.tgz", - "integrity": "sha512-VyMVKRrpHTT8PnotUeV8L/mDaMwD5DaAKCFLP73zAqAtvF0FCqky+Ki7BYbFCYQmqFyTe9316Ed5zS70QUR9eg==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@total-typescript/ts-reset": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.5.1.tgz", - "integrity": "sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" - }, - "node_modules/@types/bluebird": { - "version": "3.5.36", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", - "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" - }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "license": "MIT" - }, - "node_modules/@types/continuation-local-storage": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.4.tgz", - "integrity": "sha512-OT32vCVMymU1JMPKDeY0lX3cduAr0Pm/VwIbxygMeDS4lRcv57qYXn9bMwBRcRnEpXKBb/r4xYaZCARTZllP0A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "18.19.130", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", - "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/pg": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.2.tgz", - "integrity": "sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^4.0.1" - } - }, - "node_modules/@types/pg/node_modules/pg-types": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz", - "integrity": "sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==", - "dev": true, - "dependencies": { - "pg-int8": "1.0.1", - "pg-numeric": "1.0.2", - "postgres-array": "~3.0.1", - "postgres-bytea": "~3.0.0", - "postgres-date": "~2.0.1", - "postgres-interval": "^3.0.0", - "postgres-range": "^1.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/pg/node_modules/postgres-array": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", - "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@types/pg/node_modules/postgres-bytea": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", - "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", - "dev": true, - "dependencies": { - "obuf": "~1.1.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/pg/node_modules/postgres-date": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz", - "integrity": "sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@types/pg/node_modules/postgres-interval": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", - "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@types/request": { - "version": "2.48.13", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", - "integrity": "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==", - "license": "MIT", - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.5" - } - }, - "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/@types/sequelize": { - "version": "4.28.15", - "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.28.15.tgz", - "integrity": "sha512-DlwOs4Dz2s+bDlL4RFxl5mJZJC2r1Z7/hlTPIF0JF1RciivH120yEQF0gYQI9NXd3+KJOmvFyScaEO/7dxGQew==", - "dependencies": { - "@types/bluebird": "*", - "@types/continuation-local-storage": "*", - "@types/lodash": "*", - "@types/validator": "*" - } - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "license": "MIT" - }, - "node_modules/@types/umzug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/umzug/-/umzug-2.3.3.tgz", - "integrity": "sha512-pf+CLaMnJYC8rr0lFOa0i9euVI1ctgw0+vZ2BcG2PTqAZ8siCpHpSlBvLpYG+/HhBUBh2jpjoTPsdxCsy0nFbA==", - "dependencies": { - "@types/sequelize": "*", - "mongodb": "^4.1.4" - } - }, - "node_modules/@types/validator": { - "version": "13.11.1", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", - "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" - }, - "node_modules/@types/verror": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", - "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==" - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", - "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", - "dependencies": { - "@types/node": "*", - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", - "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", - "license": "MIT", - "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "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==", - "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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js-rfc2560": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", - "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", - "dependencies": { - "asn1.js-rfc5280": "^3.0.0" - }, - "peerDependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/asn1.js-rfc5280": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", - "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", - "dependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "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" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, - "node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=", - "engines": [ - "node" - ] - }, - "node_modules/bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/bson/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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, - "node_modules/cassandra-driver": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.8.0.tgz", - "integrity": "sha512-HritfMGq9V7SuESeSodHvArs0mLuMk7uh+7hQK2lqdvXrvm50aWxb4RPxkK3mPDdsgHjJ427xNRFITMH2ei+Sw==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "adm-zip": "~0.5.10", - "long": "~5.2.3" - }, - "engines": { - "node": ">=18" - } + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, - "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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" }, - "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==" + "node_modules/@types/bluebird": { + "version": "3.5.36", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", + "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" }, - "node_modules/color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "node_modules/@types/continuation-local-storage": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.4.tgz", + "integrity": "sha512-OT32vCVMymU1JMPKDeY0lX3cduAr0Pm/VwIbxygMeDS4lRcv57qYXn9bMwBRcRnEpXKBb/r4xYaZCARTZllP0A==", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "@types/node": "*" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", "dependencies": { - "color-name": "1.1.3" + "@types/ms": "*" } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "engines": { - "node": ">=0.1.90" - } + "node_modules/@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "undici-types": "~5.26.4" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", + "node_modules/@types/pg": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.2.tgz", + "integrity": "sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==", + "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" } }, - "node_modules/csv-parse": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.0.4.tgz", - "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" - }, - "node_modules/data-uri-to-buffer": { + "node_modules/@types/pg/node_modules/pg-types": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-browser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", - "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz", + "integrity": "sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==", + "dev": true, "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.0.1", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", - "license": "MIT", + "node_modules/@types/pg/node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/define-lazy-prop": { + "node_modules/@types/pg/node_modules/postgres-bytea": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "license": "MIT", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "dependencies": { + "obuf": "~1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "license": "BSD-3-Clause", "engines": { - "node": ">=0.3.1" + "node": ">= 6" } }, - "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "node_modules/@types/pg/node_modules/postgres-date": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz", + "integrity": "sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==", "dev": true, "engines": { "node": ">=12" } }, - "node_modules/dottie": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.7.tgz", - "integrity": "sha512-7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoUnn8PXXRg==", - "license": "MIT" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, + "node_modules/@types/pg/node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "license": "MIT", + "node_modules/@types/sequelize": { + "version": "4.28.15", + "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.28.15.tgz", + "integrity": "sha512-DlwOs4Dz2s+bDlL4RFxl5mJZJC2r1Z7/hlTPIF0JF1RciivH120yEQF0gYQI9NXd3+KJOmvFyScaEO/7dxGQew==", "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" + "@types/bluebird": "*", + "@types/continuation-local-storage": "*", + "@types/lodash": "*", + "@types/validator": "*" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/@types/umzug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/umzug/-/umzug-2.3.3.tgz", + "integrity": "sha512-pf+CLaMnJYC8rr0lFOa0i9euVI1ctgw0+vZ2BcG2PTqAZ8siCpHpSlBvLpYG+/HhBUBh2jpjoTPsdxCsy0nFbA==", "dependencies": { - "safe-buffer": "^5.0.1" + "@types/sequelize": "*", + "mongodb": "^4.1.4" } }, - "node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "node_modules/@types/validator": { + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", + "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" }, - "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==" + "node_modules/@types/verror": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", + "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==" }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", "dependencies": { - "once": "^1.4.0" + "@types/node": "*", + "@types/webidl-conversions": "*" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "node_modules/adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", "engines": { - "node": ">=6" + "node": ">=6.0" } }, - "node_modules/event-target-shim": { + "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "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==", "dependencies": { - "homedir-polyfill": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-xml-builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.0.tgz", - "integrity": "sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "path-expression-matcher": "^1.1.2" - } + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, - "node_modules/fast-xml-parser": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz", - "integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "fast-xml-builder": "^1.0.0", - "strnum": "^2.1.2" - }, - "bin": { - "fxparser": "src/cli/cli.js" + "sprintf-js": "~1.0.2" } }, - "node_modules/fast-xml-parser/node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "engines": { - "node": ">= 4.9.1" + "node": ">=0.8" } }, - "node_modules/fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "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/jimmywarting" + "url": "https://github.com/sponsors/feross" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", + "node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", "dependencies": { - "fetch-blob": "^3.1.2" + "buffer": "^5.6.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=6.9.0" } }, - "node_modules/fs-jetpack": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", - "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", + "node_modules/bson/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" + } + ], "dependencies": { - "minimatch": "^3.0.2", - "rimraf": "^2.6.3" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "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==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" } }, - "node_modules/gaxios": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", - "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "node_modules/cassandra-driver": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.8.0.tgz", + "integrity": "sha512-HritfMGq9V7SuESeSodHvArs0mLuMk7uh+7hQK2lqdvXrvm50aWxb4RPxkK3mPDdsgHjJ427xNRFITMH2ei+Sw==", "license": "Apache-2.0", "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9", - "uuid": "^9.0.1" + "@types/node": "^18.11.18", + "adm-zip": "~0.5.10", + "long": "~5.2.3" }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/gaxios/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/gcp-metadata": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", - "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", - "license": "Apache-2.0", + "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==", "dependencies": { - "gaxios": "^6.1.1", - "google-logging-utils": "^0.0.2", - "json-bigint": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14" + "node": ">=7.0.0" } }, - "node_modules/gcp-metadata/node_modules/google-logging-utils": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", - "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } + "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==" }, - "node_modules/generic-pool": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", - "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==", + "node_modules/colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", "engines": { - "node": ">= 4" + "node": ">=0.1.90" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/csv-parse": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.0.4.tgz", + "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ms": "2.1.2" }, "engines": { - "node": "*" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/google-auth-library": { - "version": "9.15.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", - "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^6.1.1", - "gcp-metadata": "^6.1.0", - "gtoken": "^7.0.0", - "jws": "^4.0.0" - }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=14" + "node": ">=0.3.1" } }, - "node_modules/google-logging-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", - "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", - "license": "Apache-2.0", + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=12" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", + "node_modules/dottie": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.7.tgz", + "integrity": "sha512-7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoUnn8PXXRg==", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/gtoken": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", - "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", - "license": "MIT", - "dependencies": { - "gaxios": "^6.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - } + "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==" }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/fast-xml-builder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.0.tgz", + "integrity": "sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "path-expression-matcher": "^1.1.2" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/fast-xml-parser": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz", + "integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", "dependencies": { - "parse-passwd": "^1.0.0" + "fast-xml-builder": "^1.0.0", + "strnum": "^2.1.2" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "node_modules/fast-xml-parser/node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" + "url": "https://github.com/sponsors/NaturalIntelligence" } ], "license": "MIT" }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "license": "MIT", + "node_modules/fs-jetpack": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", + "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "minimatch": "^3.0.2", + "rimraf": "^2.6.3" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">= 6.0.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 14" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ieee754": { @@ -3870,25 +2063,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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", @@ -3897,143 +2071,11 @@ "node": ">=8" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "license": "MIT", - "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "node_modules/kysely": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.1.tgz", @@ -4053,53 +2095,6 @@ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/logform": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", - "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, "node_modules/long": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/long/-/long-5.2.5.tgz", @@ -4122,59 +2117,12 @@ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "optional": true }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -4187,15 +2135,6 @@ "node": "*" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -4285,55 +2224,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/oauth4webapi": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", - "integrity": "sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -4341,70 +2231,18 @@ "dev": true }, "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "wrappy": "1" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-expression-matcher": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.2.tgz", @@ -4428,37 +2266,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/pg": { "version": "8.7.3", "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", @@ -4583,25 +2390,6 @@ "integrity": "sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==", "dev": true }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4610,34 +2398,11 @@ "node": ">=0.10.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/retry-as-promised": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" }, - "node_modules/retry-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", - "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", - "license": "MIT", - "dependencies": { - "@types/request": "^2.48.8", - "extend": "^3.0.2", - "teeny-request": "^9.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -4649,50 +2414,6 @@ "rimraf": "bin.js" } }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -4776,52 +2497,6 @@ "node": ">= 10.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-lru-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", - "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -4831,195 +2506,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/snowflake-sdk": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-2.3.4.tgz", - "integrity": "sha512-J+YIRLXDsE+nNn5UOtz7maWyMyrdHmvXoh/u8g079VEa9VwvjVaQa66TCt3bxL6fZQH1nmp5WhEbOPfbFn4Mag==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-sdk/client-s3": "^3.983.0", - "@aws-sdk/client-sts": "^3.983.0", - "@aws-sdk/credential-provider-node": "^3.972.5", - "@aws-sdk/ec2-metadata-service": "^3.983.0", - "@azure/identity": "^4.10.1", - "@azure/storage-blob": "12.26.x", - "@google-cloud/storage": "^7.19.0", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/signature-v4": "^5.3.8", - "@techteamer/ocsp": "1.0.1", - "asn1.js-rfc2560": "^5.0.0", - "asn1.js-rfc5280": "^3.0.0", - "axios": "^1.13.4", - "big-integer": "^1.6.43", - "bignumber.js": "^9.1.2", - "bn.js": "^5.2.1", - "browser-request": "^0.3.3", - "expand-tilde": "^2.0.2", - "fast-xml-parser": "^5.3.4", - "fastest-levenshtein": "^1.0.16", - "generic-pool": "^3.8.2", - "google-auth-library": "^10.1.0", - "https-proxy-agent": "^7.0.2", - "jsonwebtoken": "^9.0.3", - "mime-types": "^2.1.29", - "moment": "^2.29.4", - "moment-timezone": "^0.5.15", - "oauth4webapi": "^3.0.1", - "open": "^7.3.1", - "simple-lru-cache": "^0.0.2", - "toml": "^3.0.0", - "uuid": "^8.3.2", - "winston": "^3.1.0" - }, - "peerDependencies": { - "asn1.js": "^5.4.1" - } - }, - "node_modules/snowflake-sdk/node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "license": "MIT" - }, - "node_modules/snowflake-sdk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/snowflake-sdk/node_modules/gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", - "license": "Apache-2.0", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/snowflake-sdk/node_modules/gcp-metadata": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", - "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", - "license": "Apache-2.0", - "dependencies": { - "gaxios": "^7.0.0", - "google-logging-utils": "^1.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/snowflake-sdk/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/snowflake-sdk/node_modules/google-auth-library": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", - "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^7.0.0", - "gcp-metadata": "^8.0.0", - "google-logging-utils": "^1.0.0", - "gtoken": "^8.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/snowflake-sdk/node_modules/gtoken": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", - "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", - "license": "MIT", - "dependencies": { - "gaxios": "^7.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/snowflake-sdk/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/snowflake-sdk/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/snowflake-sdk/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -5055,37 +2541,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "engines": { - "node": "*" - } - }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "license": "MIT", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "license": "MIT" - }, - "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==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -5100,139 +2555,29 @@ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "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==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "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/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", - "license": "MIT" - }, - "node_modules/teeny-request": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", - "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", - "license": "Apache-2.0", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.9", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/teeny-request/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/teeny-request/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", + "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==", "dependencies": { - "agent-base": "6", - "debug": "4" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=8" } }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "license": "MIT" - }, "node_modules/toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -5338,11 +2683,6 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -5378,79 +2718,6 @@ "node": ">=0.6.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/winston": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.6.0.tgz", - "integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", - "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -5475,59 +2742,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "license": "MIT", - "dependencies": { - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wsl-utils/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -5581,82 +2800,9 @@ "engines": { "node": ">=6" } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } }, "dependencies": { - "@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "requires": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "@aws-crypto/crc32c": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "requires": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "@aws-crypto/sha1-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "requires": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "requires": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, "@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", @@ -5744,149 +2890,41 @@ "tslib": "^2.6.2" } }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, - "@aws-sdk/client-cognito-identity": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1005.0.tgz", - "integrity": "sha512-vYZCaQPvawj2W76UtQCu2VCV0vEQnHxL1MOKri4jICLSRiFPlHTosUuwJDzJIIrvTuFgR2DolbcBLRSCLBo/oQ==", - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/credential-provider-node": "^3.972.19", - "@aws-sdk/middleware-host-header": "^3.972.7", - "@aws-sdk/middleware-logger": "^3.972.7", - "@aws-sdk/middleware-recursion-detection": "^3.972.7", - "@aws-sdk/middleware-user-agent": "^3.972.20", - "@aws-sdk/region-config-resolver": "^3.972.7", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-endpoints": "^3.996.4", - "@aws-sdk/util-user-agent-browser": "^3.972.7", - "@aws-sdk/util-user-agent-node": "^3.973.5", - "@smithy/config-resolver": "^4.4.10", - "@smithy/core": "^3.23.9", - "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/hash-node": "^4.2.11", - "@smithy/invalid-dependency": "^4.2.11", - "@smithy/middleware-content-length": "^4.2.11", - "@smithy/middleware-endpoint": "^4.4.23", - "@smithy/middleware-retry": "^4.4.40", - "@smithy/middleware-serde": "^4.2.12", - "@smithy/middleware-stack": "^4.2.11", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.39", - "@smithy/util-defaults-mode-node": "^4.2.42", - "@smithy/util-endpoints": "^3.3.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-retry": "^4.2.11", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-rds": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-rds/-/client-rds-3.1005.0.tgz", - "integrity": "sha512-Dh6NYVHtC4g5faik2STbWpP4lcK6YjCs7ABitoHk8RgnyOV2d4FS58Y62zK0GEMFrRfYCJQW18zg+y7rZC6RDQ==", - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/credential-provider-node": "^3.972.19", - "@aws-sdk/middleware-host-header": "^3.972.7", - "@aws-sdk/middleware-logger": "^3.972.7", - "@aws-sdk/middleware-recursion-detection": "^3.972.7", - "@aws-sdk/middleware-sdk-rds": "^3.972.14", - "@aws-sdk/middleware-user-agent": "^3.972.20", - "@aws-sdk/region-config-resolver": "^3.972.7", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-endpoints": "^3.996.4", - "@aws-sdk/util-user-agent-browser": "^3.972.7", - "@aws-sdk/util-user-agent-node": "^3.973.5", - "@smithy/config-resolver": "^4.4.10", - "@smithy/core": "^3.23.9", - "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/hash-node": "^4.2.11", - "@smithy/invalid-dependency": "^4.2.11", - "@smithy/middleware-content-length": "^4.2.11", - "@smithy/middleware-endpoint": "^4.4.23", - "@smithy/middleware-retry": "^4.4.40", - "@smithy/middleware-serde": "^4.2.12", - "@smithy/middleware-stack": "^4.2.11", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.39", - "@smithy/util-defaults-mode-node": "^4.2.42", - "@smithy/util-endpoints": "^3.3.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-retry": "^4.2.11", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.11", - "tslib": "^2.6.2" + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } } }, - "@aws-sdk/client-s3": { + "@aws-sdk/client-cognito-identity": { "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1005.0.tgz", - "integrity": "sha512-EVl5IElgh7l9M242JYZGBt2AtdylpSKEFiEHBfB2OKuh2es19IQkDNfLFGfzThXWbapfBjXuB0zs9nplNviOSQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1005.0.tgz", + "integrity": "sha512-vYZCaQPvawj2W76UtQCu2VCV0vEQnHxL1MOKri4jICLSRiFPlHTosUuwJDzJIIrvTuFgR2DolbcBLRSCLBo/oQ==", + "optional": true, "requires": { - "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/credential-provider-node": "^3.972.19", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.7", - "@aws-sdk/middleware-expect-continue": "^3.972.7", - "@aws-sdk/middleware-flexible-checksums": "^3.973.5", "@aws-sdk/middleware-host-header": "^3.972.7", - "@aws-sdk/middleware-location-constraint": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", - "@aws-sdk/middleware-sdk-s3": "^3.972.19", - "@aws-sdk/middleware-ssec": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", - "@aws-sdk/signature-v4-multi-region": "^3.996.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", - "@smithy/eventstream-serde-browser": "^4.2.11", - "@smithy/eventstream-serde-config-resolver": "^4.3.11", - "@smithy/eventstream-serde-node": "^4.2.11", "@smithy/fetch-http-handler": "^5.3.13", - "@smithy/hash-blob-browser": "^4.2.12", "@smithy/hash-node": "^4.2.11", - "@smithy/hash-stream-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", - "@smithy/md5-js": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", @@ -5906,16 +2944,14 @@ "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", - "@smithy/util-stream": "^4.5.17", "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.11", "tslib": "^2.6.2" } }, - "@aws-sdk/client-sts": { + "@aws-sdk/client-rds": { "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.1005.0.tgz", - "integrity": "sha512-TCCWkROc6akngO5595RBmD3Zeq9CFtoZa3TsugyvOoDEd0c/FFOnoAZ7TdTe3MLuvkbXH5yvN6hLyLQgytNIAg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-rds/-/client-rds-3.1005.0.tgz", + "integrity": "sha512-Dh6NYVHtC4g5faik2STbWpP4lcK6YjCs7ABitoHk8RgnyOV2d4FS58Y62zK0GEMFrRfYCJQW18zg+y7rZC6RDQ==", "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -5924,6 +2960,7 @@ "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", + "@aws-sdk/middleware-sdk-rds": "^3.972.14", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", @@ -5955,6 +2992,7 @@ "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", + "@smithy/util-waiter": "^4.2.11", "tslib": "^2.6.2" } }, @@ -5978,15 +3016,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/crc64-nvme": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.4.tgz", - "integrity": "sha512-HKZIZLbRyvzo/bXZU7Zmk6XqU+1C9DjI56xd02vwuDIxedxBEqP17t9ExhbP9QFeNq/a3l9GOcyirFXxmbDhmw==", - "requires": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, "@aws-sdk/credential-provider-cognito-identity": { "version": "3.972.11", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.11.tgz", @@ -6154,66 +3183,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/ec2-metadata-service": { - "version": "3.1005.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.1005.0.tgz", - "integrity": "sha512-3+6X75C5m4AZohyfIITmKHLrYzLwdOsXj9Bb7M+yejELl2WNau8X46+jehIkSH57Iu5uyFbfhanYwp6LmaD6jw==", - "requires": { - "@aws-sdk/types": "^3.973.5", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/node-http-handler": "^4.4.14", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.17", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.7.tgz", - "integrity": "sha512-goX+axlJ6PQlRnzE2bQisZ8wVrlm6dXJfBzMJhd8LhAIBan/w1Kl73fJnalM/S+18VnpzIHumyV6DtgmvqG5IA==", - "requires": { - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-expect-continue": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.7.tgz", - "integrity": "sha512-mvWqvm61bmZUKmmrtl2uWbokqpenY3Mc3Jf4nXB/Hse6gWxLPaCQThmhPBDzsPSV8/Odn8V6ovWt3pZ7vy4BFQ==", - "requires": { - "@aws-sdk/types": "^3.973.5", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-flexible-checksums": { - "version": "3.973.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.973.5.tgz", - "integrity": "sha512-Dp3hqE5W6hG8HQ3Uh+AINx9wjjqYmFHbxede54sGj3akx/haIQrkp85lNdTdC+ouNUcSYNiuGkzmyDREfHX1Gg==", - "requires": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/crc64-nvme": "^3.972.4", - "@aws-sdk/types": "^3.973.5", - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, "@aws-sdk/middleware-host-header": { "version": "3.972.7", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.7.tgz", @@ -6225,16 +3194,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/middleware-location-constraint": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.7.tgz", - "integrity": "sha512-vdK1LJfffBp87Lj0Bw3WdK1rJk9OLDYdQpqoKgmpIZPe+4+HawZ6THTbvjhJt4C4MNnRrHTKHQjkwBiIpDBoig==", - "requires": { - "@aws-sdk/types": "^3.973.5", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, "@aws-sdk/middleware-logger": { "version": "3.972.7", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.7.tgz", @@ -6271,37 +3230,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.972.19", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.19.tgz", - "integrity": "sha512-/CtOHHVFg4ZuN6CnLnYkrqWgVEnbOBC4kNiKa+4fldJ9cioDt3dD/f5vpq0cWLOXwmGL2zgVrVxNhjxWpxNMkg==", - "requires": { - "@aws-sdk/core": "^3.973.19", - "@aws-sdk/types": "^3.973.5", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.9", - "@smithy/node-config-provider": "^4.3.11", - "@smithy/protocol-http": "^5.3.11", - "@smithy/signature-v4": "^5.3.11", - "@smithy/smithy-client": "^4.12.3", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.11", - "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-ssec": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.7.tgz", - "integrity": "sha512-G9clGVuAml7d8DYzY6DnRi7TIIDRvZ3YpqJPz/8wnWS5fYx/FNWNmkO6iJVlVkQg9BfeMzd+bVPtPJOvC4B+nQ==", - "requires": { - "@aws-sdk/types": "^3.973.5", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, "@aws-sdk/middleware-user-agent": { "version": "3.972.20", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.20.tgz", @@ -6374,19 +3302,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.996.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.7.tgz", - "integrity": "sha512-mYhh7FY+7OOqjkYkd6+6GgJOsXK1xBWmuR+c5mxJPj2kr5TBNeZq+nUvE9kANWAux5UxDVrNOSiEM/wlHzC3Lg==", - "requires": { - "@aws-sdk/middleware-sdk-s3": "^3.972.19", - "@aws-sdk/types": "^3.973.5", - "@smithy/protocol-http": "^5.3.11", - "@smithy/signature-v4": "^5.3.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, "@aws-sdk/token-providers": { "version": "3.1005.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1005.0.tgz", @@ -6410,14 +3325,6 @@ "tslib": "^2.6.2" } }, - "@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", - "requires": { - "tslib": "^2.6.2" - } - }, "@aws-sdk/util-endpoints": { "version": "3.996.4", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.4.tgz", @@ -6487,198 +3394,6 @@ "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==" }, - "@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==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" - } - }, - "@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - } - }, - "@azure/core-http-compat": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz", - "integrity": "sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-client": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0" - } - }, - "@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", - "requires": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - } - }, - "@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@azure/core-rest-pipeline": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", - "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - } - }, - "@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - } - }, - "@azure/core-xml": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.5.0.tgz", - "integrity": "sha512-D/sdlJBMJfx7gqoj66PKVmhDDaU6TKA49ptcolxdas29X7AfvLTmfAGLjAcIMBK7UZ2o4lygHIqVckOlQU3xWw==", - "requires": { - "fast-xml-parser": "^5.0.7", - "tslib": "^2.8.1" - } - }, - "@azure/identity": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", - "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", - "requires": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", - "@azure/core-rest-pipeline": "^1.17.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.5.0", - "open": "^10.1.0", - "tslib": "^2.2.0" - }, - "dependencies": { - "open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "requires": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - } - } - } - }, - "@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "requires": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - } - }, - "@azure/msal-browser": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.1.tgz", - "integrity": "sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==", - "requires": { - "@azure/msal-common": "15.14.1" - } - }, - "@azure/msal-common": { - "version": "15.14.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.1.tgz", - "integrity": "sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==" - }, - "@azure/msal-node": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.6.tgz", - "integrity": "sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==", - "requires": { - "@azure/msal-common": "15.14.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - } - }, - "@azure/storage-blob": { - "version": "12.26.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.26.0.tgz", - "integrity": "sha512-SriLPKezypIsiZ+TtlFfE46uuBIap2HeaQVS78e1P7rz5OSbq0rsd52WE1mC5f7vAeLiXqv7I7oRhL3WFZEw3Q==", - "requires": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.4.0", - "@azure/core-client": "^1.6.2", - "@azure/core-http-compat": "^2.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.1.1", - "@azure/core-rest-pipeline": "^1.10.1", - "@azure/core-tracing": "^1.1.2", - "@azure/core-util": "^1.6.1", - "@azure/core-xml": "^1.4.3", - "@azure/logger": "^1.0.0", - "events": "^3.0.0", - "tslib": "^2.2.0" - }, - "dependencies": { - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - } - } - }, "@clickhouse/client": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.14.0.tgz", @@ -6692,11 +3407,6 @@ "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.14.0.tgz", "integrity": "sha512-CyUcv2iCkZ1A++vmOSufYRpHR3aAWVfbrWed7ATzf0yyx/BW/2SEqlL07vBpSRa3BIkQe/DSOHVv8JkWZpUOwQ==" }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" - }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -6705,115 +3415,6 @@ "@jridgewell/trace-mapping": "0.3.9" } }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@google-cloud/paginator": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", - "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "@google-cloud/projectify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==" - }, - "@google-cloud/promisify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", - "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==" - }, - "@google-cloud/storage": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz", - "integrity": "sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==", - "requires": { - "@google-cloud/paginator": "^5.0.0", - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "<4.1.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "duplexify": "^4.1.3", - "fast-xml-parser": "^5.3.4", - "gaxios": "^6.0.2", - "google-auth-library": "^9.6.3", - "html-entities": "^2.5.2", - "mime": "^3.0.0", - "p-limit": "^3.0.1", - "retry-request": "^7.0.0", - "teeny-request": "^9.0.0", - "uuid": "^8.0.0" - } - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" - }, - "ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, "@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -6847,12 +3448,6 @@ "sparse-bitfield": "^3.0.3" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true - }, "@roostorg/db-migrator": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@roostorg/db-migrator/-/db-migrator-1.0.8.tgz", @@ -6887,23 +3482,6 @@ "tslib": "^2.6.2" } }, - "@smithy/chunked-blob-reader": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz", - "integrity": "sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/chunked-blob-reader-native": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz", - "integrity": "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==", - "requires": { - "@smithy/util-base64": "^4.3.2", - "tslib": "^2.6.2" - } - }, "@smithy/config-resolver": { "version": "4.4.10", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.10.tgz", @@ -6929,70 +3507,20 @@ "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-stream": "^4.5.17", - "@smithy/util-utf8": "^4.2.2", - "@smithy/uuid": "^1.1.2", - "tslib": "^2.6.2" - } - }, - "@smithy/credential-provider-imds": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.11.tgz", - "integrity": "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==", - "requires": { - "@smithy/node-config-provider": "^4.3.11", - "@smithy/property-provider": "^4.2.11", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.11", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-codec": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.11.tgz", - "integrity": "sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w==", - "requires": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-browser": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.11.tgz", - "integrity": "sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA==", - "requires": { - "@smithy/eventstream-serde-universal": "^4.2.11", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-config-resolver": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.11.tgz", - "integrity": "sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA==", - "requires": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-node": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.11.tgz", - "integrity": "sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw==", - "requires": { - "@smithy/eventstream-serde-universal": "^4.2.11", - "@smithy/types": "^4.13.0", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, - "@smithy/eventstream-serde-universal": { + "@smithy/credential-provider-imds": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.11.tgz", - "integrity": "sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q==", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.11.tgz", + "integrity": "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==", "requires": { - "@smithy/eventstream-codec": "^4.2.11", + "@smithy/node-config-provider": "^4.3.11", + "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.11", "tslib": "^2.6.2" } }, @@ -7008,17 +3536,6 @@ "tslib": "^2.6.2" } }, - "@smithy/hash-blob-browser": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.12.tgz", - "integrity": "sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ==", - "requires": { - "@smithy/chunked-blob-reader": "^5.2.2", - "@smithy/chunked-blob-reader-native": "^4.2.3", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - } - }, "@smithy/hash-node": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.11.tgz", @@ -7030,16 +3547,6 @@ "tslib": "^2.6.2" } }, - "@smithy/hash-stream-node": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.11.tgz", - "integrity": "sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ==", - "requires": { - "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, "@smithy/invalid-dependency": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.11.tgz", @@ -7057,16 +3564,6 @@ "tslib": "^2.6.2" } }, - "@smithy/md5-js": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.11.tgz", - "integrity": "sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng==", - "requires": { - "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, "@smithy/middleware-content-length": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.11.tgz", @@ -7406,23 +3903,6 @@ "tslib": "^2.6.2" } }, - "@techteamer/ocsp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@techteamer/ocsp/-/ocsp-1.0.1.tgz", - "integrity": "sha512-q4pW5wAC6Pc3JI8UePwE37CkLQ5gDGZMgjSX4MEEm4D4Di59auDQ8UNIDzC4gRnPNmmcwjpPxozq8p5pjiOmOw==", - "requires": { - "asn1.js": "^5.4.1", - "asn1.js-rfc2560": "^5.0.1", - "asn1.js-rfc5280": "^3.0.0", - "async": "^3.2.4", - "simple-lru-cache": "^0.0.2" - } - }, - "@tootallnate/once": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-3.0.1.tgz", - "integrity": "sha512-VyMVKRrpHTT8PnotUeV8L/mDaMwD5DaAKCFLP73zAqAtvF0FCqky+Ki7BYbFCYQmqFyTe9316Ed5zS70QUR9eg==" - }, "@total-typescript/ts-reset": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.5.1.tgz", @@ -7458,11 +3938,6 @@ "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" }, - "@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" - }, "@types/continuation-local-storage": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.4.tgz", @@ -7552,32 +4027,6 @@ } } }, - "@types/request": { - "version": "2.48.13", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", - "integrity": "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==", - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.5" - }, - "dependencies": { - "form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - } - } - } - }, "@types/sequelize": { "version": "4.28.15", "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.28.15.tgz", @@ -7589,11 +4038,6 @@ "@types/validator": "*" } }, - "@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" - }, "@types/umzug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/umzug/-/umzug-2.3.3.tgz", @@ -7640,35 +4084,6 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, - "@typespec/ts-http-runtime": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", - "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", - "requires": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - } - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -7684,14 +4099,6 @@ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" }, - "agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "requires": { - "debug": "^4.3.4" - } - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -7718,71 +4125,11 @@ "sprintf-js": "~1.0.2" } }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "asn1.js-rfc2560": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", - "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", - "requires": { - "asn1.js-rfc5280": "^3.0.0" - } - }, - "asn1.js-rfc5280": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", - "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", - "requires": { - "asn1.js": "^5.0.0" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "requires": { - "retry": "0.13.1" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", - "requires": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7793,21 +4140,6 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" - }, - "bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" - }, - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==" - }, "bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -7822,11 +4154,6 @@ "concat-map": "0.0.1" } }, - "browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" - }, "bson": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", @@ -7846,33 +4173,11 @@ } } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" }, - "bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "requires": { - "run-applescript": "^7.0.0" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, "cassandra-driver": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.8.0.tgz", @@ -7893,30 +4198,6 @@ "wrap-ansi": "^7.0.0" } }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7930,37 +4211,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" }, - "colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7976,26 +4231,11 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "csv-parse": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.0.4.tgz", "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -8004,30 +4244,6 @@ "ms": "2.1.2" } }, - "default-browser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", - "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", - "requires": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - } - }, - "default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==" - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, "diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", @@ -8044,40 +4260,6 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.7.tgz", "integrity": "sha512-7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoUnn8PXXRg==" }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "emittery": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", @@ -8088,71 +4270,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "requires": { - "once": "^1.4.0" - } - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -8182,261 +4304,36 @@ } } }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" - }, - "fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" - }, - "foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "requires": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - } - }, - "form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, "fs-jetpack": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", - "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", - "requires": { - "minimatch": "^3.0.2", - "rimraf": "^2.6.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "gaxios": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", - "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9", - "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } - } - }, - "gcp-metadata": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", - "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", - "requires": { - "gaxios": "^6.1.1", - "google-logging-utils": "^0.0.2", - "json-bigint": "^1.0.0" - }, - "dependencies": { - "google-logging-utils": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", - "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==" - } - } - }, - "generic-pool": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", - "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "google-auth-library": { - "version": "9.15.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", - "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", - "requires": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^6.1.1", - "gcp-metadata": "^6.1.0", - "gtoken": "^7.0.0", - "jws": "^4.0.0" - } - }, - "google-logging-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", - "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==" - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "gtoken": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", - "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", - "requires": { - "gaxios": "^6.0.0", - "jws": "^4.0.0" - } - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", + "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", "requires": { - "parse-passwd": "^1.0.0" + "minimatch": "^3.0.2", + "rimraf": "^2.6.3" } }, - "html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "requires": { - "@tootallnate/once": "^3.0.1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - } - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { - "agent-base": "^7.0.2", - "debug": "4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "ieee754": { @@ -8479,117 +4376,16 @@ } } }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, "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==" }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "requires": { - "is-docker": "^3.0.0" - }, - "dependencies": { - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" - } - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, "jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "requires": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - } - }, - "jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "requires": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "requires": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "kysely": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.1.tgz", @@ -8605,53 +4401,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "logform": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", - "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, "long": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/long/-/long-5.2.5.tgz", @@ -8670,40 +4419,12 @@ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "optional": true }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -8712,11 +4433,6 @@ "brace-expansion": "^1.1.7" } }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -8785,24 +4501,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "oauth4webapi": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", - "integrity": "sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==" - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -8817,46 +4515,11 @@ "wrappy": "1" } }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, "path-expression-matcher": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.2.tgz", @@ -8867,27 +4530,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - } - } - }, "pg": { "version": "8.7.3", "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", @@ -8978,46 +4620,16 @@ "integrity": "sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==", "dev": true }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, "retry-as-promised": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" }, - "retry-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", - "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", - "requires": { - "@types/request": "^2.48.8", - "extend": "^3.0.2", - "teeny-request": "^9.0.0" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -9026,26 +4638,6 @@ "glob": "^7.1.3" } }, - "run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==" - }, - "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==" - }, - "safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -9082,182 +4674,11 @@ "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - }, - "simple-lru-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", - "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, - "snowflake-sdk": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-2.3.4.tgz", - "integrity": "sha512-J+YIRLXDsE+nNn5UOtz7maWyMyrdHmvXoh/u8g079VEa9VwvjVaQa66TCt3bxL6fZQH1nmp5WhEbOPfbFn4Mag==", - "requires": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-sdk/client-s3": "^3.983.0", - "@aws-sdk/client-sts": "^3.983.0", - "@aws-sdk/credential-provider-node": "^3.972.5", - "@aws-sdk/ec2-metadata-service": "^3.983.0", - "@azure/identity": "^4.10.1", - "@azure/storage-blob": "12.26.x", - "@google-cloud/storage": "^7.19.0", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/signature-v4": "^5.3.8", - "@techteamer/ocsp": "1.0.1", - "asn1.js-rfc2560": "^5.0.0", - "asn1.js-rfc5280": "^3.0.0", - "axios": "^1.13.4", - "big-integer": "^1.6.43", - "bignumber.js": "^9.1.2", - "bn.js": "^5.2.1", - "browser-request": "^0.3.3", - "expand-tilde": "^2.0.2", - "fast-xml-parser": "^5.3.4", - "fastest-levenshtein": "^1.0.16", - "generic-pool": "^3.8.2", - "google-auth-library": "^10.1.0", - "https-proxy-agent": "^7.0.2", - "jsonwebtoken": "^9.0.3", - "mime-types": "^2.1.29", - "moment": "^2.29.4", - "moment-timezone": "^0.5.15", - "oauth4webapi": "^3.0.1", - "open": "^7.3.1", - "simple-lru-cache": "^0.0.2", - "toml": "^3.0.0", - "uuid": "^8.3.2", - "winston": "^3.1.0" - }, - "dependencies": { - "bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==" - }, - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" - } - }, - "gcp-metadata": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", - "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", - "requires": { - "gaxios": "^7.0.0", - "google-logging-utils": "^1.0.0", - "json-bigint": "^1.0.0" - } - }, - "glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "google-auth-library": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", - "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", - "requires": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^7.0.0", - "gcp-metadata": "^8.0.0", - "google-logging-utils": "^1.0.0", - "gtoken": "^8.0.0", - "jws": "^4.0.0" - } - }, - "gtoken": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", - "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", - "requires": { - "gaxios": "^7.0.0", - "jws": "^4.0.0" - } - }, - "minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "requires": { - "brace-expansion": "^2.0.2" - } - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "requires": { - "glob": "^10.3.7" - } - } - } - }, "socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -9286,32 +4707,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "requires": { - "stubs": "^3.0.0" - } - }, - "stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" - }, - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -9327,16 +4722,6 @@ "strip-ansi": "^6.0.1" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -9345,80 +4730,11 @@ "ansi-regex": "^5.0.1" } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, - "teeny-request": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", - "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.9", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" - }, "toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, "ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -9481,11 +4797,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -9511,60 +4822,6 @@ "extsprintf": "^1.2.0" } }, - "web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "winston": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.6.0.tgz", - "integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", - "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - } - }, - "winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - }, "wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -9583,39 +4840,11 @@ "strip-ansi": "^6.0.0" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "requires": { - "is-wsl": "^3.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "requires": { - "is-inside-container": "^1.0.0" - } - } - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -9654,11 +4883,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/.devops/migrator/package.json b/.devops/migrator/package.json index fa96b3b..62d07fc 100644 --- a/.devops/migrator/package.json +++ b/.devops/migrator/package.json @@ -21,7 +21,6 @@ "lodash": "^4.17.21", "pg": "^8.7.1", "sequelize": "^6.32.1", - "snowflake-sdk": "^2.3.3", "ts-node": "^10.9.2", "uid": "^2.0.0", "umzug": "^3.0.0", @@ -31,10 +30,5 @@ "@types/pg": "^8.10.2", "dotenv": "^16.0.0", "typescript": "^5.2.2" - }, - "overrides": { - "snowflake-sdk": { - "@tootallnate/once": "^3.0.1" - } } } diff --git a/.devops/migrator/src/configs/snowflake.ts b/.devops/migrator/src/configs/snowflake.ts deleted file mode 100644 index 4aa222c..0000000 --- a/.devops/migrator/src/configs/snowflake.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { readFileSync } from 'fs'; -import { dirname, join as pathJoin, resolve as pathResolve } from 'path'; -import { fileURLToPath } from 'url'; -import { - makeSequelizeUmzugStorage, - SCRIPT_TEMPLATES_DIR_ABSOLUTE_PATH, - wrapMigration, - type DatabaseConfig, -} from '@roostorg/db-migrator'; -import { Sequelize, type Options, type QueryInterface } from 'sequelize'; -import { Umzug } from 'umzug'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const relativePath = (it: string) => pathJoin(__dirname, it); - -const driverOpts = { - database: process.env.SNOWFLAKE_DB_NAME!, - username: process.env.SNOWFLAKE_USERNAME!, - password: process.env.SNOWFLAKE_PASSWORD!, - logging: console.log, - dialect: 'snowflake', - schema: 'PUBLIC', - dialectOptions: { - account: String(process.env.SNOWFLAKE_ACCOUNT), - schema: 'PUBLIC', - warehouse: process.env.SNOWFLAKE_WAREHOUSE, - role: process.env.SNOWFLAKE_ROLE || 'ACCOUNTADMIN', - // The max time one statement can run before the client will assume - // it's disconnected from snowflake and timeout. - timeout: 7_200_000, // 2hr. - // Enable multi-statement execution for all queries - // This allows running .sql files with multiple statements - clientSessionKeepAlive: true, - enableArrowResultFormat: false, - }, - pool: { - max: 10, // 20 is the hard limit in snowflake for number of waiters on a lock - acquire: 300_000_000, // effectively unlimited - }, -} satisfies Options; - -export default { - defaultScriptFormat: 'cjs', - supportedScriptFormats: ['cjs', 'sql'], - scriptsDirectory: relativePath('../scripts/snowflake'), - supportedEnvironments: ['staging', 'prod'], - createStorage() { - return makeSequelizeUmzugStorage(new Sequelize(driverOpts), { - schema: driverOpts.schema, - }); - }, - createContext() { - return new Sequelize(driverOpts).getQueryInterface(); - }, - destroyContext(it) { - return it.sequelize.close(); - }, - getTemplate(filePath) { - return filePath.endsWith('.cjs') - ? readFileSync( - pathResolve( - SCRIPT_TEMPLATES_DIR_ABSOLUTE_PATH, - './sequelize-snowflake.cjs', - ), - 'utf8', - ) - : ''; - }, - resolveScript(params) { - // Unlike in pg, we don't (for now) do any post-migration validation - // (e.g., on views), but we do (re)set the db + schema at the start of - // every migration so that the migration doesn't have to worry about a - // prior migration having possibly switched to a different context. - const { path } = params; - const { sequelize } = params.context; - const { database, schema } = driverOpts; - - const baseResult = path.endsWith('.cjs') - ? Umzug.defaultResolver(params) - : { - name: params.name, - async up() { - const sql = readFileSync(path).toString(); - - // Snowflake doesn't support multi-statement execution in a single query via Sequelize - // We need to split and execute statements individually - // Split by semicolon but preserve procedure bodies (which contain semicolons) - const statements: string[] = []; - let currentStatement = ''; - let inProcedure = false; - let procedureQuoteChar = ''; - - for (const line of sql.split('\n')) { - const trimmed = line.trim(); - - // Skip comment lines - if (trimmed.startsWith('--') || trimmed.length === 0) { - continue; - } - - currentStatement += line + '\n'; - - // Track if we're inside a procedure/function body - if (trimmed.match(/^(CREATE|create).*(PROCEDURE|FUNCTION|procedure|function)/i)) { - inProcedure = true; - } - - // Look for the procedure/function body delimiter - if (inProcedure && trimmed.match(/^AS\s+['"]$/i)) { - procedureQuoteChar = trimmed.slice(-1); - } - - // Check if we're exiting the procedure - if (inProcedure && procedureQuoteChar && trimmed === `${procedureQuoteChar};`) { - inProcedure = false; - procedureQuoteChar = ''; - statements.push(currentStatement.trim()); - currentStatement = ''; - continue; - } - - // Regular statement end (not in procedure) - if (!inProcedure && trimmed.endsWith(';')) { - statements.push(currentStatement.trim()); - currentStatement = ''; - } - } - - // Add any remaining statement - if (currentStatement.trim()) { - statements.push(currentStatement.trim()); - } - - // Execute each statement - for (const statement of statements) { - if (statement.length > 0) { - await sequelize.query(statement); - } - } - }, - }; - - async function resetActiveSchemaAndDb() { - await sequelize.query(`USE DATABASE "${database}";`); - await sequelize.query(`USE SCHEMA "${schema}";`); - } - - return wrapMigration({ runBefore: resetActiveSchemaAndDb }, baseResult); - }, - async dropDbAndDisconnect() { - const sequelize = new Sequelize(driverOpts); - - await sequelize.query(`DROP DATABASE "${driverOpts.database}";`); - await sequelize.close(); - }, - async prepareDbAndDisconnect() { - const sequelize = new Sequelize(driverOpts); - const { SNOWFLAKE_CLONE_SOURCE_DATABASE } = process.env; - await sequelize.query( - `CREATE DATABASE IF NOT EXISTS "${driverOpts.database}"${ - SNOWFLAKE_CLONE_SOURCE_DATABASE - ? ' CLONE ' + SNOWFLAKE_CLONE_SOURCE_DATABASE - : '' - };`, - ); - await sequelize.close(); - }, -} satisfies DatabaseConfig<'sql' | 'cjs', QueryInterface> as DatabaseConfig< - 'sql' | 'cjs', - QueryInterface ->; diff --git a/.devops/migrator/src/index.ts b/.devops/migrator/src/index.ts index 77adf4d..b240b12 100755 --- a/.devops/migrator/src/index.ts +++ b/.devops/migrator/src/index.ts @@ -4,11 +4,9 @@ import { makeCli } from '@roostorg/db-migrator'; import apiServerPostgresConfig from './configs/api-server-pg.js'; import clickhouseConfig from './configs/clickhouse.js'; import scyllaConfig from './configs/scylla.js'; -import snowflakeConfig from './configs/snowflake.js'; makeCli({ 'api-server-pg': apiServerPostgresConfig, clickhouse: clickhouseConfig, - snowflake: snowflakeConfig, scylla: scyllaConfig, }); diff --git a/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.00.initial-schema.sql b/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.00.initial-schema.sql index 82485a4..a1f30fb 100644 --- a/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.00.initial-schema.sql +++ b/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.00.initial-schema.sql @@ -713,7 +713,7 @@ CREATE FUNCTION public.update_rule_versions_view() RETURNS void BEGIN -- NB: this refresh must _not_ be done `CONCURRENTLY`, as we want the view to -- be immediately consistent with the persisted rule definition, so that we - -- don't end up with rows in snowflake that specify an old rule version but + -- don't end up with rows in the data warehouse that specify an old rule version but -- ran with a newer rule definition. The view changes so rarely that the -- overhead here should be fine. -- @@ -2516,18 +2516,6 @@ CREATE TABLE public.signing_keys ( ALTER TABLE public.signing_keys OWNER TO postgres; --- --- Name: snowflake_outbox; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public.snowflake_outbox ( - data text NOT NULL, - recorded_at timestamp with time zone DEFAULT now() -); - - -ALTER TABLE public.snowflake_outbox OWNER TO postgres; - -- -- Name: text_banks; Type: TABLE; Schema: public; Owner: postgres -- @@ -3719,13 +3707,6 @@ CREATE INDEX rule_versions_version_idx ON public.rule_versions USING btree (vers CREATE INDEX rules_and_actions_rule_id_idx ON public.rules_and_actions USING btree (rule_id); --- --- Name: snowflake_outbox_content_api_requests_recorded_at_idx; Type: INDEX; Schema: public; Owner: postgres --- - -CREATE INDEX snowflake_outbox_content_api_requests_recorded_at_idx ON public.snowflake_outbox USING btree (recorded_at); - - -- -- Name: user_favorite_rules_idx; Type: INDEX; Schema: public; Owner: postgres -- diff --git a/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.01.initial-test-data.seed.staging.sql b/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.01.initial-test-data.seed.staging.sql index b39f034..2748099 100644 --- a/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.01.initial-test-data.seed.staging.sql +++ b/.devops/migrator/src/scripts/api-server-pg/2025.12.01T00.00.01.initial-test-data.seed.staging.sql @@ -403,12 +403,6 @@ INSERT INTO public.rules_history VALUES ('9800eb88a94', 'Delete Holocaust Denial --- --- Data for Name: snowflake_outbox; Type: TABLE DATA; Schema: public; Owner: postgres --- - - - -- -- Data for Name: text_banks; Type: TABLE DATA; Schema: public; Owner: postgres -- diff --git a/.devops/migrator/src/scripts/clickhouse/2025.11.22T00.00.00.initial-schema.sql b/.devops/migrator/src/scripts/clickhouse/2025.11.22T00.00.00.initial-schema.sql index 09e3e85..d8ff3d6 100644 --- a/.devops/migrator/src/scripts/clickhouse/2025.11.22T00.00.00.initial-schema.sql +++ b/.devops/migrator/src/scripts/clickhouse/2025.11.22T00.00.00.initial-schema.sql @@ -1,4 +1,4 @@ --- Create ClickHouse databases mirroring Snowflake schemas +-- Create ClickHouse databases mirroring data warehouse schemas CREATE DATABASE IF NOT EXISTS analytics; CREATE DATABASE IF NOT EXISTS ACTION_STATISTICS_SERVICE; CREATE DATABASE IF NOT EXISTS MANUAL_REVIEW_TOOL; diff --git a/.devops/migrator/src/scripts/snowflake/2024.12.02T00.00.00.initial-schema-flattened.sql b/.devops/migrator/src/scripts/snowflake/2024.12.02T00.00.00.initial-schema-flattened.sql deleted file mode 100644 index 5d5d581..0000000 --- a/.devops/migrator/src/scripts/snowflake/2024.12.02T00.00.00.initial-schema-flattened.sql +++ /dev/null @@ -1,1973 +0,0 @@ --- ================================================================================ --- SNOWFLAKE SCHEMA - FLATTENED --- Generated: 2025-12-02 --- ================================================================================ - --- ================================================================================ --- SCHEMA: PUBLIC --- ================================================================================ - -create or replace schema PUBLIC; - -create or replace TABLE PUBLIC.ACTION_EXECUTIONS cluster by (ds, org_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -ACTION_ID VARCHAR(16777216) NOT NULL, -ACTION_NAME VARCHAR(16777216) NOT NULL, -RULES ARRAY, -POLICIES ARRAY, -RULE_TAGS ARRAY, -RULE_ENVIRONMENT VARCHAR(16777216), -CORRELATION_ID VARCHAR(16777216) NOT NULL, -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216), -ITEM_SUBMISSION_ID VARCHAR(16777216), -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_ID VARCHAR(16777216), -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ACTION_SOURCE VARCHAR(16777216) NOT NULL, -ACTOR_ID VARCHAR(16777216), -JOB_ID VARCHAR(16777216), -FAILED BOOLEAN DEFAULT FALSE -); - -create or replace TABLE PUBLIC.ALL_ORGS ( -ID VARCHAR(16777216) NOT NULL, -NAME VARCHAR(16777216) NOT NULL, -EMAIL VARCHAR(16777216) NOT NULL, -WEBSITE_URL VARCHAR(16777216) NOT NULL, -DATE_CREATED DATE NOT NULL -)COMMENT='Contains metadata about every customer, with one row per customer organization' -; - -create or replace TABLE PUBLIC.CONTENT_API_REQUESTS cluster by (ds, org_id, event, item_type_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -EVENT VARCHAR(16777216) NOT NULL, -REQUEST_ID VARCHAR(16777216) NOT NULL, -SUBMISSION_ID VARCHAR(16777216) NOT NULL, -FAILURE_REASON VARCHAR(16777216), -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_NAME VARCHAR(16777216) NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_DATA VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA VARCHAR(16777216) NOT NULL, -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_TYPE_VERSION VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT NOT NULL DEFAULT '{}' -); - -create or replace TABLE PUBLIC.CONTENT_DETAILS_API_REQUESTS ( -CONTENT_ID VARCHAR(16777216) NOT NULL, -ORG_ID VARCHAR(16777216) NOT NULL, -EVENT VARCHAR(16777216), -FAILURE_REASON VARCHAR(16777216), -DS DATE, -TS VARCHAR(16777216) -)COMMENT='This table contains one row per API request to the Content Deatils API, which returns details about the rules matched on - and actions run on - a piece of content' -; - -create or replace TABLE PUBLIC.INGESTED_JSON ( -TARGET_TABLE VARCHAR(16777216), -DATA VARIANT, -DS DATE -); - -create or replace TABLE PUBLIC.ITEM_MODEL_SCORES_LOG cluster by (ds, org_id, event, item_type_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -MODEL_ID VARCHAR(16777216), -MODEL_VERSION NUMBER(38,0), -MODEL_SCORE FLOAT, -EVENT VARCHAR(16777216) NOT NULL, -SUBMISSION_ID VARCHAR(16777216) NOT NULL, -FAILURE_REASON VARCHAR(16777216), -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_NAME VARCHAR(16777216) NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_DATA VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA VARCHAR(16777216) NOT NULL, -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_TYPE_VERSION VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT NOT NULL DEFAULT '{}' -); - -create or replace TABLE PUBLIC.RULE_EXECUTIONS cluster by (ds, org_id, passed, rule_id, LOWER(SUBSTRING(item_id, 0, 3)))( -RULE VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -RULE_VERSION TIMESTAMP_NTZ(9), -ORG_ID VARCHAR(16777216) NOT NULL, -ENVIRONMENT VARCHAR(16777216) NOT NULL, -CORRELATION_ID VARCHAR(16777216), -POLICY_IDS ARRAY, -POLICY_NAMES ARRAY, -TAGS ARRAY, -RESULT VARCHAR(16777216), -PASSED BOOLEAN NOT NULL, -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -ITEM_DATA VARCHAR(16777216), -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_SUBMISSION_ID VARCHAR(16777216), -ITEM_TYPE_NAME VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_TYPE_SCHEMA VARCHAR(16777216), -ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT, -ITEM_TYPE_VERSION VARCHAR(16777216), -ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) -); - -create or replace TABLE PUBLIC.RULE_EXECUTION_STATISTICS cluster by (ORG_ID, TIME_SLICE(TS_START_INCLUSIVE, 1, 'day'), RULE_ID)( -ORG_ID VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -RULE_VERSION TIMESTAMP_NTZ(9) NOT NULL, -NUM_PASSES NUMBER(38,0) NOT NULL, -NUM_RUNS NUMBER(38,0) NOT NULL, -TS_START_INCLUSIVE TIMESTAMP_NTZ(9) NOT NULL, -TS_END_EXCLUSIVE TIMESTAMP_NTZ(9) NOT NULL, -ENVIRONMENT VARCHAR(16777216), -RULE_POLICY_NAMES ARRAY, -RULE_POLICY_IDS ARRAY, -RULE_TAGS ARRAY -); - -create or replace TABLE PUBLIC."SequelizeMeta" ( -"name" VARCHAR(255) NOT NULL, -"createdAt" TIMESTAMP_NTZ(9) NOT NULL, -"updatedAt" TIMESTAMP_NTZ(9) NOT NULL, -primary key ("name") -); - -CREATE OR REPLACE FUNCTION PUBLIC.ARRAY_DCAT("ARRAY1" ARRAY, "ARRAY2" ARRAY) -RETURNS ARRAY -LANGUAGE JAVASCRIPT -STRICT -IMMUTABLE -COMMENT='Returns a distinct concatenation of two arrays' -AS ' -return Array.from(new Set(ARRAY1.concat(ARRAY2))); -'; - -CREATE OR REPLACE PROCEDURE PUBLIC.INGEST_NEW_ROWS() -RETURNS VARCHAR(16777216) -LANGUAGE SQL -EXECUTE AS OWNER -AS ' -declare -unknown_table_exception exception; -begin -BEGIN TRANSACTION; -INSERT INTO ACTION_EXECUTIONS ( -ORG_ID, -ACTION_ID, -ACTION_NAME, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -ITEM_SUBMISSION_ID, -ITEM_ID, -ITEM_TYPE_KIND, -ITEM_TYPE_ID, -RULES, -POLICIES, -RULE_TAGS, -RULE_ENVIRONMENT, -CORRELATION_ID, -ACTION_SOURCE, -ACTOR_ID, -JOB_ID, -FAILED, -TS, -DS) -SELECT -data:data:org_id::string, -data:data:action_id::string, -data:data:action_name::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:item_submission_id::string, -data:data:item_id::string, -data:data:item_type_kind::string, -data:data:item_type_id::string, -data:data:rules::array, -data:data:policies::array, -data:data:rule_tags::array, -data:data:rule_environment::string, -data:data:correlation_id::string, -data:data:action_source::string, -data:data:actor_id::string, -data:data:job_id::string, -data:data:failed::boolean, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''ACTION_EXECUTIONS''; -INSERT INTO RULE_EXECUTIONS ( -ITEM_DATA, -ITEM_ID, -item_submission_id, -item_type_name, -item_type_id, -ITEM_TYPE_KIND, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -RULE, -RULE_ID, -RULE_VERSION, -ORG_ID, -ENVIRONMENT, -CORRELATION_ID, -POLICY_IDS, -POLICY_NAMES, -TAGS, -RESULT, -PASSED, -TS, -DS) -SELECT -data:data:item_data::string, -data:data:item_id::string, -data:data:item_submission_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_kind::string, -data:data:item_type_version::string, -data:data:item_type_schema::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:rule::string, -data:data:rule_id::string, -data:data:rule_version::datetime, -data:data:org_id::string, -data:data:environment::string, -data:data:correlation_id::string, -data:data:policy_ids::array, -data:data:policy_names::array, -data:data:tags::array, -data:data:result::string, -data:data:passed::boolean, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''RULE_EXECUTIONS''; -INSERT INTO CONTENT_API_REQUESTS ( -ORG_ID, -EVENT, -REQUEST_ID, -SUBMISSION_ID, -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_KIND, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -FAILURE_REASON, -TS, -DS) -SELECT -data:data:org_id::string, -data:data:event::string, -data:data:request_id::string, -data:data:submission_id::string, -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_schema::string, -data:data:item_type_kind::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_version::string, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:failure_reason::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''CONTENT_API_REQUESTS''; -INSERT INTO ITEM_MODEL_SCORES_LOG ( -ORG_ID, -EVENT, -MODEL_ID, -MODEL_VERSION, -MODEL_SCORE, -SUBMISSION_ID, -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_KIND, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -FAILURE_REASON, -TS, -DS) -SELECT -data:data:org_id::string, -data:data:event::string, -data:data:model_id::string, -data:data:model_version::number, -data:data:model_score::float, -data:data:submission_id::string, -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_schema::string, -data:data:item_type_kind::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_version::string, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:failure_reason::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''ITEM_MODEL_SCORES_LOG''; -INSERT INTO REPORTING_SERVICE.APPEALS ( -ORG_ID, -REQUEST_ID, -APPEAL_ID, -APPEALED_BY_USER_ID, -APPEALED_BY_USER_ITEM_TYPE_ID, -APPEALED_AT, -APPEAL_REASON, -ACTIONS_TAKEN, -ACTIONED_ITEM_DATA, -ACTIONED_ITEM_ID, -ACTIONED_ITEM_TYPE_ID, -ACTIONED_ITEM_TYPE_KIND, -ACTIONED_ITEM_TYPE_SCHEMA, -ACTIONED_ITEM_TYPE_SCHEMA_FIELD_ROLES, -ACTIONED_ITEM_TYPE_VERSION, -ACTIONED_ITEM_TYPE_SCHEMA_VARIANT, -ADDITIONAL_ITEMS, -TS -) -SELECT -data:data:org_id::string, -data:data:request_id::string, -data:data:appeal_id::string, -data:data:appealed_by_user_id::string, -data:data:appealed_by_user_item_type_id::string, -COALESCE(TO_TIMESTAMP_NTZ(data:data:appealed_at::string), TO_TIMESTAMP_NTZ(CURRENT_TIMESTAMP)), -data:data:appeal_reason::string, -data:data:actions_taken::array, -data:data:actioned_item_data::string, -data:data:actioned_item_id::string, -data:data:actioned_item_type_id::string, -data:data:actioned_item_type_kind::string, -data:data:actioned_item_type_schema::string, -data:data:actioned_item_type_schema_field_roles::object, -data:data:actioned_item_type_version::string, -data:data:actioned_item_type_schema_variant::string, -COALESCE(data:data:additional_items, [])::array, -TO_TIMESTAMP_NTZ(data:data:ts::string) -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''REPORTING_SERVICE.APPEALS''; -INSERT INTO MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS ( -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_KIND, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -RULE, -RULE_ID, -RULE_VERSION, -DESTINATION_QUEUE_ID, -ORG_ID, -CORRELATION_ID, -RESULT, -PASSED, -JOB_KIND, -TS, -DS) -SELECT -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_kind::string, -data:data:item_type_version::string, -data:data:item_type_schema::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:rule::string, -data:data:rule_id::string, -data:data:rule_version::datetime, -data:data:destination_queue_id::string, -data:data:org_id::string, -data:data:correlation_id::string, -data:data:result::variant, -data:data:passed::boolean, -data:data:job_kind::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS''; -INSERT INTO REPORTING_SERVICE.REPORTS ( -ORG_ID, -REQUEST_ID, -REPORTER_USER_ID, -REPORTER_USER_ITEM_TYPE_ID, -REPORTER_KIND, -REPORTED_AT, -POLICY_ID, -REPORTED_FOR_REASON, -REPORTED_ITEM_DATA, -REPORTED_ITEM_ID, -REPORTED_ITEM_TYPE_ID, -REPORTED_ITEM_TYPE_KIND, -REPORTED_ITEM_TYPE_SCHEMA, -REPORTED_ITEM_TYPE_SCHEMA_FIELD_ROLES, -REPORTED_ITEM_TYPE_VERSION, -REPORTED_ITEM_TYPE_SCHEMA_VARIANT, -REPORTED_ITEM_THREAD, -REPORTED_ITEMS_IN_THREAD, -ADDITIONAL_ITEMS, -TS -) -SELECT -data:data:org_id::string, -data:data:request_id::string, -data:data:reporter_user_id::string, -data:data:reporter_user_item_type_id::string, -data:data:reporter_kind::string, -COALESCE(TO_TIMESTAMP_NTZ(data:data:reported_at::string), TO_TIMESTAMP_NTZ(CURRENT_TIMESTAMP)), -data:data:policy_id::string, -data:data:reported_for_reason::string, -data:data:reported_item_data::object, -data:data:reported_item_id::string, -data:data:reported_item_type_id::string, -data:data:reported_item_type_kind::string, -data:data:reported_item_type_schema::array, -data:data:reported_item_type_schema_field_roles::object, -data:data:reported_item_type_version::string, -data:data:reported_item_type_schema_variant::string, -data:data:reported_item_thread::array, -COALESCE(data:data:reported_items_in_thread, [])::array, -COALESCE(data:data:additional_items, [])::array, -TO_TIMESTAMP_NTZ(data:data:ts::string) -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''REPORTING_SERVICE.REPORTS''; -INSERT INTO MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS ( -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_KIND, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -RULE, -RULE_ID, -RULE_VERSION, -DESTINATION_QUEUE_ID, -ORG_ID, -CORRELATION_ID, -RESULT, -PASSED, -JOB_KIND, -TS, -DS) -SELECT -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_kind::string, -data:data:item_type_version::string, -data:data:item_type_schema::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:rule::string, -data:data:rule_id::string, -data:data:rule_version::datetime, -data:data:destination_queue_id::string, -data:data:org_id::string, -data:data:correlation_id::string, -data:data:result::variant, -data:data:passed::boolean, -data:data:job_kind::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS''; -INSERT INTO REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS ( -RULE_NAME, -RULE_ID, -RULE_VERSION, -RULE_ENVIRONMENT, -ORG_ID, -CORRELATION_ID, -RESULT, -PASSED, -TS, -DS, -POLICY_NAMES, -POLICY_IDS, -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_KIND, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA_VARIANT) -SELECT -data:data:rule_name::string, -data:data:rule_id::string, -data:data:rule_version::datetime, -data:data:rule_environment::string, -data:data:org_id::string, -data:data:correlation_id::string, -data:data:result::variant, -data:data:passed::boolean, -to_timestamp(data:data:ts::number, 3), -ds, -data:data:policy_names::array, -data:data:policy_ids::array, -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_kind::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:item_type_schema::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_version::string, -data:data:item_type_schema_variant::string -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS''; -COMMIT; -end; -'; - -CREATE OR REPLACE FUNCTION PUBLIC.REFORMAT_CONDITION_SIGNALS("V" VARIANT) -RETURNS VARIANT -LANGUAGE JAVASCRIPT -IMMUTABLE -AS ' -function reformatCondition(condition) { -if (condition.conditions) { -return { -...condition, -conditions: condition.conditions.map(it => reformatCondition(it)), -}; -} -const { signal } = condition; -// conditions w/ no signals stay as-is. -if(!signal) { -return condition; -} -// conditions w/ a valid signal id stay as-is. -if(signal.id && signal.id[0] === "{") { -return condition; -} -condition.signal.id = JSON.stringify({ type: signal.type }); -return condition; -} -return reformatCondition(V); -'; - -create or replace stream PUBLIC.INGESTED_JSON_TO_TABLES on table INGESTED_JSON append_only = true; - -create or replace stream PUBLIC.POPULATE_RULE_EXECUTION_STATISTICS_STREAM on table RULE_EXECUTIONS append_only = true; - -create or replace task PUBLIC.INGEST_JSON_TO_TABLES_TASK -schedule='1 MINUTE' -error_integration=AWS_NOTIFICATION_INTEGRATION -when SYSTEM$STREAM_HAS_DATA('ingested_json_to_tables') -as CALL ingest_new_rows(); - -create or replace view PUBLIC.NGL_ALL_SCORES( -ITEM_DATA, -COUNTRY, -TRANSLATED_CONTENT, -HIVE_BULLYING, -HIVE_HATE, -HIVE_VIOLENCE, -HIVE_MAX, -HIVE_BULLYING_TRANSLATED, -OPEN_AI_HATE, -OPEN_AI_HATE_THREATENING, -OPEN_AI_SELF_HARM, -OPEN_AI_VIOLENCE, -PERSPECTIVE_IDENTITY_ATTACK, -PERSPECTIVE_INSULT, -PERSPECTIVE_SEVERE_TOXICITY, -PERSPECTIVE_THREAT, -PERSPECTIVE_TOXICITY, -PERSPECTIVE_MAX, -PERSPECTIVE_IDENTITY_ATTACK_TRANSLATED, -PERSPECTIVE_INSULT_TRANSLATED, -PERSPECTIVE_SEVERE_TOXICITY_TRANSLATED, -PERSPECTIVE_THREAT_TRANSLATED, -PERSPECTIVE_TOXICITY_TRANSLATED, -PERSPECTIVE_TRANSLATED_MAX, -CLARIFAI_HATE, -CLARIFAI_INSULT, -CLARIFAI_THREAT, -CLARIFAI_MAX, -ITEM_ID, -DETECTED_LANGUAGE, -DS -) as -WITH rule_execs AS ( -SELECT -item_id, -rule_id, -ANY_VALUE(item_data) as item_data, -ANY_VALUE(result) as result, -ANY_VALUE(ts) as ts, -ANY_VALUE(org_id) as org_id, -ANY_VALUE(ds) as ds -FROM PUBLIC.rule_executions -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' AND ds <= '2023-03-08' -GROUP BY 1, 2 -) -SELECT -PARSE_JSON(hive_bullying.item_data):text as item_data, -SUBSTRING(PARSE_JSON(hive_bullying.item_data):country, 1, LEN(PARSE_JSON(hive_bullying.item_data):country)) as country, -translated_content, -CAST(hive_bullying_score as int) as hive_bullying, -CAST(hive_hate as int) as hive_hate, -CAST(hive_violence as int) as hive_violence, -GREATEST( -CAST(hive_bullying_score as int), -CAST(hive_hate as int), -CAST(hive_violence as int) -) as hive_max, -CAST(hive_bullying_translated as int) as hive_bullying_translated, -ROUND(CAST(open_ai_hate as float), 4) as open_ai_hate, -ROUND(CAST(open_ai_hate_threatening as float), 4) as open_ai_hate_threatening, -ROUND(CAST(open_ai_self_harm as float), 4) as open_ai_self_harm, -ROUND(CAST(open_ai_violence as float), 4) as open_ai_violence, -ROUND(CAST(perspective_identity_attack as float), 4) as perspective_identity_attack, -ROUND(CAST(perspective_insult as float), 4) as perspective_insult, -ROUND(CAST(perspective_severe_toxicity as float), 4) as perspective_severe_toxicity, -ROUND(CAST(perspective_threat as float), 4) as perspective_threat, -ROUND(CAST(perspective_toxicity as float), 4) as perspective_toxicity, -GREATEST( -ROUND(CAST(perspective_identity_attack as float), 4), -ROUND(CAST(perspective_insult as float), 4), -ROUND(CAST(perspective_severe_toxicity as float), 4), -ROUND(CAST(perspective_threat as float), 4), -ROUND(CAST(perspective_toxicity as float), 4) -) as perspective_max, -ROUND(CAST(perspective_identity_attack_translated as float), 4) as perspective_identity_attack_translated, -ROUND(CAST(perspective_insult_translated as float), 4) as perspective_insult_translated, -ROUND(CAST(perspective_severe_toxicity_translated as float), 4) as perspective_severe_toxicity_translated, -ROUND(CAST(perspective_threat_translated as float), 4) as perspective_threat_translated, -ROUND(CAST(perspective_toxicity_translated as float), 4) as perspective_toxicity_translated, -GREATEST( -ROUND(CAST(perspective_identity_attack_translated as float), 4), -ROUND(CAST(perspective_insult_translated as float), 4), -ROUND(CAST(perspective_severe_toxicity_translated as float), 4), -ROUND(CAST(perspective_threat_translated as float), 4), -ROUND(CAST(perspective_toxicity_translated as float), 4) -) as perspective_translated_max, -ROUND(CAST(clarifai_hate as float), 4) as clarifai_hate, -ROUND(CAST(clarifai_insult as float), 4) as clarifai_insult, -ROUND(CAST(clarifai_threat as float), 4) as clarifai_threat, -GREATEST( -ROUND(CAST(clarifai_hate as float), 4), -ROUND(CAST(clarifai_insult as float), 4), -ROUND(CAST(clarifai_threat as float), 4) -) as clarifai_max, -hive_bullying.item_id, -detected_language, -ds -FROM ( -SELECT -item_data, -GET(PARSE_JSON(result):conditions, 0):result.score as hive_bullying_score, -result, -item_id, -ds -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'ec9165c5652' -AND item_id != 'hO3RvmWdpc0nq3sR87pb' -) hive_bullying -LEFT JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as hive_hate, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '575e9852e2c' -) hive_hate -ON hive_bullying.item_id = hive_hate.item_id -LEFT JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as hive_violence, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'eec9165c565' -) hive_violence -ON hive_bullying.item_id = hive_violence.item_id -LEFT JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as detected_language, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '8e32c1e856d' -) language -ON hive_bullying.item_id = language.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as open_ai_hate, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '9165c5652ae' -) open_ai_hate -ON hive_bullying.item_id = open_ai_hate.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as open_ai_hate_threatening, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '165c5652aec' -) open_ai_hate_threatening -ON hive_bullying.item_id = open_ai_hate_threatening.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as open_ai_self_harm, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '5c5652aec17' -) open_ai_self_harm -ON hive_bullying.item_id = open_ai_self_harm.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as open_ai_violence, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '65c5652aec1' -) open_ai_violence -ON hive_bullying.item_id = open_ai_violence.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_identity_attack, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'f224d9ca08a' -) perspective_identity_attack -ON hive_bullying.item_id = perspective_identity_attack.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_insult, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'ee189024f28' -) perspective_insult -ON hive_bullying.item_id = perspective_insult.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_profanity, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '1724e465115' -) perspective_profanity -ON hive_bullying.item_id = perspective_profanity.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_severe_toxicity, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '224d9ca08a5' -) perspective_severe_toxicity -ON hive_bullying.item_id = perspective_severe_toxicity.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_threat, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '91724e46511' -) perspective_threat -ON hive_bullying.item_id = perspective_threat.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_toxicity, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '24d9ca08a59' -) perspective_toxicity -ON hive_bullying.item_id = perspective_toxicity.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_identity_attack_translated, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '6b66dc40019' -) perspective_identity_attack_translated -ON hive_bullying.item_id = perspective_identity_attack_translated.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_insult_translated, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'b66dc400198' -) perspective_insult_translated -ON hive_bullying.item_id = perspective_insult_translated.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_severe_toxicity_translated, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '66dc4001984' -) perspective_severe_toxicity_translated -ON hive_bullying.item_id = perspective_severe_toxicity_translated.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_threat_translated, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = 'da7bf615b84' -) perspective_threat_translated -ON hive_bullying.item_id = perspective_threat_translated.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as perspective_toxicity_translated, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND ds >= '2023-01-30' -AND rule_id = '6dc40019843' -) perspective_toxicity_translated_translated -ON hive_bullying.item_id = perspective_toxicity_translated_translated.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as clarifai_hate, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND rule_id = '61fb88ec276' -AND ds >= '2023-01-30' -) clarifai_hate -ON hive_bullying.item_id = clarifai_hate.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as clarifai_insult, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND rule_id = 'fb88ec27602' -AND ds >= '2023-01-30' -) clarifai_insult -ON hive_bullying.item_id = clarifai_insult.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as clarifai_threat, result, item_id, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND rule_id = '1fb88ec2760' -AND ds >= '2023-01-30' -) clarifai_threat -ON hive_bullying.item_id = clarifai_threat.item_id -INNER JOIN ( -SELECT item_data, GET(PARSE_JSON(result):conditions, 0):result.score as hive_bullying_translated, result, item_id, SUBSTRING(GET(GET(PARSE_JSON(result):conditions, 0):result.signalInputValues, 0):value, 1, LEN(GET(GET(PARSE_JSON(result):conditions, 0):result.signalInputValues, 0):value) - 16) AS translated_content, ts -FROM rule_execs -WHERE org_id = '8dee189024f' -AND rule_id = '779764f2a81' -AND ds >= '2023-01-30' -) hive_bullying_translated -ON hive_bullying.item_id = hive_bullying_translated.item_id; - -CREATE OR REPLACE FUNCTION PUBLIC.FIX_NULL_INPUT_TYPES("V" VARCHAR(16777216)) -RETURNS VARCHAR(16777216) -LANGUAGE JAVASCRIPT -AS ' -function isConditionSet(it) { -return ''conjunction'' in it && ''conditions'' in it; -} -function mapLeafCondition(condition) { -// Skip all conditions that got migrated already. -// Needed because this migration often times out and must be -// idempotent so we can re-run it until it completes. -if (condition.input.type != null) { -return condition; -} -if (condition.input.name !== ''All text'' && condition.input.name !== ''Any geohash'') { -return condition; -} -return { -input: { -name: condition.input.name, -type: ''CONTENT_PROTEGO_INPUT'' -}, -type: ''CONTENT_PROTEGO_INPUT'' -}; -} -function mapCondition(condition) { -return isConditionSet(condition) -? { -...condition, -conditions: condition.conditions.map(mapCondition), -} -: mapLeafCondition(condition); -} -function replaceConditions(resultString) { -const result = JSON.parse(resultString); -const { conditions } = result; -return JSON.stringify({ -...result, -conditions: conditions.map(mapCondition) -}); -} -return replaceConditions(V); -'; - -CREATE OR REPLACE FUNCTION PUBLIC.HAS_OLD_GEOHASH_CONDITIONS("V" VARIANT) -RETURNS VARIANT -LANGUAGE JAVASCRIPT -AS ' -function hasOldCondition(conditions) { -return conditions?.some((it) => { -if (it.conditions) { -return hasOldCondition(it.conditions); -} -return it.input?.scalarType === ''GEOHASH'' -&& it.threshold === Number(it.threshold) -&& it.comparator !== ''LOCATED_IN'' -&& it.comparator !== ''NOT_LOCATED_IN''; -}) ?? false; -} -return hasOldCondition(V); -'; - -CREATE OR REPLACE FUNCTION PUBLIC.MIGRATE_RESULT_CONDITIONS("V" VARIANT) -RETURNS VARIANT -LANGUAGE JAVASCRIPT -AS ' -function replaceConditions(conditions) { -return conditions.map(function mapCondition(condition) { -return isConditionSet(condition) -? { ...condition, conditions: condition.conditions.map(mapCondition) } -: mapLeafCondition(condition); -}) -} -// Helpers copied from the PG migration, but changed because old results -// stored in snowflake refrence a min-distance signal that no longer exists. -function isConditionSet(it) { -return ''conjunction'' in it && ''conditions'' in it; -} -function mapLeafCondition(it) { -return it.input?.scalarType === ''GEOHASH'' && !it.signal?.type -? { -...it, -signal: { ...(it.signal ?? {}), type: ''GEO_CONTAINED_WITHIN'' }, -comparator: ''EQUALS'', -threshold: it.comparator === ''LOCATED_IN'', -} -: it; -} -return replaceConditions(V); -'; - -CREATE OR REPLACE FUNCTION PUBLIC.VALIDATE_RULE_RESULTS("V" VARCHAR(16777216)) -RETURNS VARCHAR(16777216) -LANGUAGE JAVASCRIPT -AS ' -function validateCondition(it) { -return ''conditions'' in it -? it.conditions.every(innerCondition => validateCondition(innerCondition)) -: it.input.type != null -} -return validateCondition(JSON.parse(V)); -'; - -create or replace task PUBLIC.POPULATE_RULE_EXECUTION_STATISTICS -schedule='5 MINUTE' -error_integration=AWS_NOTIFICATION_INTEGRATION -when SYSTEM$STREAM_HAS_DATA('populate_rule_execution_statistics_stream') -as MERGE INTO rule_execution_statistics -USING ( -SELECT -org_id, -rule_id, -rule_version, -environment, --- Every execution row for a (org_id, rule_id, rule_version) group should --- have the same policy names + policy ids + tags, so we can pick any value. --- This is safe because a change to any of these values in the app would --- create a new rule version. -any_value(policy_names) as policy_names, -any_value(policy_ids) as policy_ids, -any_value(tags) as tags, -SUM(passed::number) as num_passes, -COUNT(*) as num_runs, -TIMESTAMP_NTZ_FROM_PARTS(year(ds), month(ds), day(ds), hour(ts), 0, 0) as ts_start -FROM populate_rule_execution_statistics_stream -WHERE METADATA$ACTION = 'INSERT' -GROUP BY org_id, rule_id, rule_version, environment, ds, hour(ts) -) as executions -ON executions.ts_start = rule_execution_statistics.ts_start_inclusive -AND executions.rule_id = rule_execution_statistics.rule_id -AND executions.rule_version = rule_execution_statistics.rule_version -AND executions.environment = rule_execution_statistics.environment -WHEN MATCHED THEN -UPDATE -SET num_passes = (rule_execution_statistics.num_passes + executions.num_passes), -num_runs = (rule_execution_statistics.num_runs + executions.num_runs) -WHEN NOT MATCHED THEN -INSERT ( -org_id, -rule_id, -rule_version, -rule_tags, -rule_policy_names, -rule_policy_ids, -environment, -num_passes, -num_runs, -ts_start_inclusive, -ts_end_exclusive) -VALUES ( -executions.org_id, -executions.rule_id, -executions.rule_version, -executions.tags, -executions.policy_names, -executions.policy_ids, -executions.environment, -executions.num_passes, -executions.num_runs, -executions.ts_start, -timestampadd(hour, 1, executions.ts_start)); - --- ================================================================================ --- SCHEMA: ACTION_STATISTICS_SERVICE --- ================================================================================ - -create or replace schema ACTION_STATISTICS_SERVICE; - -create or replace TABLE ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS ( -DS DATE NOT NULL, -ORG_ID VARCHAR(16777216) NOT NULL, -NUM_SUBMISSIONS NUMBER(38,0) NOT NULL, -SUBMISSION_IDS ARRAY -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_POLICY ( -DS DATE NOT NULL, -ORG_ID VARCHAR(16777216) NOT NULL, -NUM_SUBMISSIONS NUMBER(38,0) NOT NULL, -SUBMISSION_IDS ARRAY, -POLICY_ID VARCHAR(16777216) NOT NULL, -POLICY_NAME VARCHAR(16777216) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_TAG ( -DS DATE NOT NULL, -ORG_ID VARCHAR(16777216) NOT NULL, -NUM_SUBMISSIONS NUMBER(38,0) NOT NULL, -SUBMISSION_IDS ARRAY, -TAG VARCHAR(16777216) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.BY_ACTION cluster by (org_id, TIME_SLICE(action_time, 12, 'HOUR'))( -ORG_ID VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216), -ACTION_ID VARCHAR(16777216) NOT NULL, -ACTION_TIME TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.BY_ITEM_TYPE cluster by (org_id, TIME_SLICE(action_time, 12, 'HOUR'))( -ORG_ID VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216), -ACTION_TIME TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.BY_POLICY cluster by (org_id, TIME_SLICE(action_time, 12, 'HOUR'))( -ORG_ID VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216), -POLICY_ID VARCHAR(16777216) NOT NULL, -ACTION_TIME TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.BY_RULE cluster by (org_id, TIME_SLICE(action_time, 12, 'HOUR'))( -ORG_ID VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -ACTION_TIME TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE ACTION_STATISTICS_SERVICE.BY_SOURCE cluster by (org_id, TIME_SLICE(action_time, 12, 'HOUR'))( -ORG_ID VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216), -SOURCE VARCHAR(16777216) NOT NULL, -ACTION_TIME TIMESTAMP_NTZ(9) NOT NULL -); - -CREATE OR REPLACE FUNCTION ACTION_STATISTICS_SERVICE.ARRAY_DCAT("ARRAY1" ARRAY, "ARRAY2" ARRAY) -RETURNS ARRAY -LANGUAGE JAVASCRIPT -STRICT -IMMUTABLE -COMMENT='Returns a distinct concatenation of two arrays' -AS ' -return Array.from(new Set(ARRAY1.concat(ARRAY2))); -'; - -CREATE OR REPLACE PROCEDURE ACTION_STATISTICS_SERVICE.MATERIALIZE_STATS() -RETURNS VARCHAR(16777216) -LANGUAGE SQL -EXECUTE AS OWNER -AS ' -BEGIN -BEGIN TRANSACTION; --- OLD TABLES, will be removed once code is updated and deployed -MERGE INTO action_statistics_service.actioned_submission_counts -USING ( -SELECT -org_id, -ds, -count(DISTINCT item_submission_id) AS num_submissions -FROM action_statistics_service.materialize_stats_stream -GROUP BY org_id, ds -) AS new_submissions_by_date -ON new_submissions_by_date.ds = action_statistics_service.actioned_submission_counts.ds -AND new_submissions_by_date.org_id = action_statistics_service.actioned_submission_counts.org_id -WHEN MATCHED THEN -UPDATE SET -num_submissions = actioned_submission_counts.num_submissions + new_submissions_by_date.num_submissions -WHEN NOT MATCHED THEN -INSERT (org_id, ds, num_submissions) -VALUES ( -new_submissions_by_date.org_id, -new_submissions_by_date.ds, -new_submissions_by_date.num_submissions -); -MERGE INTO action_statistics_service.actioned_submission_counts_by_policy -USING ( -SELECT -org_id, -count(DISTINCT item_submission_id) AS num_submissions, -policies.value:id as policy_id, -any_value(policies.value:name) policy_name, -ds -FROM action_statistics_service.materialize_stats_stream, -lateral flatten(input => materialize_stats_stream.POLICIES) policies -GROUP BY org_id, ds, policies.value:id -) AS new_submissions_by_date -ON new_submissions_by_date.ds = action_statistics_service.actioned_submission_counts_by_policy.ds -AND new_submissions_by_date.org_id = action_statistics_service.actioned_submission_counts_by_policy.org_id -AND new_submissions_by_date.policy_id = action_statistics_service.actioned_submission_counts_by_policy.policy_id -WHEN MATCHED THEN -UPDATE SET -num_submissions = actioned_submission_counts_by_policy.num_submissions + new_submissions_by_date.num_submissions -WHEN NOT MATCHED THEN -INSERT (org_id, ds, num_submissions, policy_id, policy_name) -VALUES ( -new_submissions_by_date.org_id, -new_submissions_by_date.ds, -new_submissions_by_date.num_submissions, -new_submissions_by_date.policy_id, -new_submissions_by_date.policy_name); -MERGE INTO action_statistics_service.actioned_submission_counts_by_tag -USING ( -SELECT -org_id, -count(DISTINCT item_submission_id) AS num_submissions, -tags.value as tag, -ds -FROM action_statistics_service.materialize_stats_stream, -lateral flatten(input => materialize_stats_stream.RULE_TAGS) tags -GROUP BY org_id, ds, tag -) AS new_submissions_by_date -ON new_submissions_by_date.ds = action_statistics_service.actioned_submission_counts_by_tag.ds -AND new_submissions_by_date.tag = action_statistics_service.actioned_submission_counts_by_tag.tag -AND new_submissions_by_date.org_id = action_statistics_service.actioned_submission_counts_by_tag.org_id -WHEN MATCHED THEN -UPDATE SET -num_submissions = actioned_submission_counts_by_tag.num_submissions + new_submissions_by_date.num_submissions -WHEN NOT MATCHED THEN -INSERT (org_id, ds, num_submissions, tag) -VALUES ( -new_submissions_by_date.org_id, -new_submissions_by_date.ds, -new_submissions_by_date.num_submissions, -new_submissions_by_date.tag); --- NEW TABLES, will stick around after we remove the old ones --- Populate by_item_type table -INSERT INTO action_statistics_service.by_item_type (org_id, item_id, item_type_id, action_time) -WITH new_actions_by_item_type AS ( -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -TS as action_time -FROM action_statistics_service.materialize_stats_stream -) -SELECT ORG_ID, ITEM_ID, ITEM_TYPE_ID, action_time -FROM new_actions_by_item_type; --- Populate by_policy table -INSERT INTO action_statistics_service.by_policy (org_id, item_id, item_type_id, policy_id, action_time) -WITH new_actions_by_policy AS ( -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -policies.value:id as policy_id, -TS as action_time -FROM action_statistics_service.materialize_stats_stream, -LATERAL FLATTEN(input => materialize_stats_stream.POLICIES) policies -) -SELECT ORG_ID, ITEM_ID, ITEM_TYPE_ID, policy_id, action_time -FROM new_actions_by_policy; --- Populate by_rule table -INSERT INTO action_statistics_service.by_rule (org_id, item_id, item_type_id, rule_id, action_time) -WITH new_actions_by_rule AS ( -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -rules.value:id as rule_id, -TS as action_time -FROM action_statistics_service.materialize_stats_stream, -LATERAL FLATTEN(input => materialize_stats_stream.RULES) rules -) -SELECT ORG_ID, ITEM_ID, ITEM_TYPE_ID, rule_id, action_time -FROM new_actions_by_rule; --- Populate by_action table -INSERT INTO action_statistics_service.by_action (org_id, item_id, item_type_id, action_id, action_time) -WITH new_actions_by_action AS ( -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -ACTION_ID, -TS as action_time -FROM action_statistics_service.materialize_stats_stream -) -SELECT ORG_ID, ITEM_ID, ITEM_TYPE_ID, ACTION_ID, action_time -FROM new_actions_by_action; --- Populate by_source table -INSERT INTO action_statistics_service.by_source (org_id, item_id, item_type_id, source, action_time) -WITH new_actions_by_action AS ( -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -ACTION_SOURCE, -TS as action_time -FROM action_statistics_service.materialize_stats_stream -) -SELECT -ORG_ID, -ITEM_ID, -ITEM_TYPE_ID, -ACTION_SOURCE, -action_time -FROM new_actions_by_action; -COMMIT; -END; -'; - -create or replace stream ACTION_STATISTICS_SERVICE.MATERIALIZE_STATS_STREAM on table ACTION_EXECUTIONS append_only = true; - -create or replace task ACTION_STATISTICS_SERVICE.MATERIALIZE_STATS_TASK -schedule='10 MINUTE' -error_integration=AWS_NOTIFICATION_INTEGRATION -when SYSTEM$STREAM_HAS_DATA('ACTION_STATISTICS_SERVICE.MATERIALIZE_STATS_STREAM') -as CALL ACTION_STATISTICS_SERVICE.MATERIALIZE_STATS(); - --- ================================================================================ --- SCHEMA: MANUAL_REVIEW_TOOL --- ================================================================================ - -create or replace schema MANUAL_REVIEW_TOOL; - -create or replace TABLE MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS cluster by (ds, org_id, passed, rule_id, LOWER(SUBSTRING(item_id, 0, 3)))( -RULE VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -RULE_VERSION TIMESTAMP_NTZ(9) NOT NULL, -DESTINATION_QUEUE_ID VARCHAR(16777216), -ORG_ID VARCHAR(16777216) NOT NULL, -CORRELATION_ID VARCHAR(16777216), -RESULT VARIANT, -PASSED BOOLEAN NOT NULL, -JOB_KIND VARCHAR(16777216) NOT NULL, -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -ITEM_DATA VARCHAR(16777216), -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_NAME VARCHAR(16777216), -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_TYPE_SCHEMA VARCHAR(16777216), -ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT, -ITEM_TYPE_VERSION VARCHAR(16777216), -ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) -); - --- ================================================================================ --- SCHEMA: NCMEC_SERVICE --- ================================================================================ - -create or replace schema NCMEC_SERVICE; - -CREATE OR REPLACE PROCEDURE NCMEC_SERVICE.INGEST_NEW_ROWS() -RETURNS VARCHAR(16777216) -LANGUAGE SQL -EXECUTE AS OWNER -AS ' -declare -unknown_table_exception exception; -begin -BEGIN TRANSACTION; -INSERT INTO ACTION_EXECUTIONS ( -ORG_ID, -ACTION_ID, -ACTION_NAME, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -ITEM_SUBMISSION_ID, -ITEM_ID, -ITEM_TYPE_KIND, -ITEM_TYPE_ID, -RULES, -POLICIES, -RULE_TAGS, -RULE_ENVIRONMENT, -CORRELATION_ID, -TS, -DS) -SELECT -data:data:org_id::string, -data:data:action_id::string, -data:data:action_name::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:item_submission_id::string, -data:data:item_id::string, -data:data:item_type_kind::string, -data:data:item_type_id::string, -data:data:rules::array, -data:data:policies::array, -data:data:rule_tags::array, -data:data:rule_environment::string, -data:data:correlation_id::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''ACTION_EXECUTIONS''; -INSERT INTO RULE_EXECUTIONS ( -ITEM_DATA, -ITEM_ID, -item_submission_id, -item_type_name, -item_type_id, -ITEM_TYPE_KIND, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -RULE, -RULE_ID, -RULE_VERSION, -ORG_ID, -ENVIRONMENT, -CORRELATION_ID, -POLICY_IDS, -POLICY_NAMES, -TAGS, -RESULT, -PASSED, -TS, -DS) -SELECT -data:data:item_data::string, -data:data:item_id::string, -data:data:item_submission_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_kind::string, -data:data:item_type_version::string, -data:data:item_type_schema::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:rule::string, -data:data:rule_id::string, -data:data:rule_version::datetime, -data:data:org_id::string, -data:data:environment::string, -data:data:correlation_id::string, -data:data:policy_ids::array, -data:data:policy_names::array, -data:data:tags::array, -data:data:result::string, -data:data:passed::boolean, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''RULE_EXECUTIONS''; -INSERT INTO CONTENT_API_REQUESTS ( -ORG_ID, -EVENT, -REQUEST_ID, -SUBMISSION_ID, -ITEM_DATA, -ITEM_ID, -ITEM_TYPE_NAME, -ITEM_TYPE_ID, -ITEM_TYPE_SCHEMA, -ITEM_TYPE_KIND, -ITEM_TYPE_SCHEMA_FIELD_ROLES, -ITEM_TYPE_VERSION, -ITEM_TYPE_SCHEMA_VARIANT, -ITEM_CREATOR_ID, -ITEM_CREATOR_TYPE_ID, -FAILURE_REASON, -TS, -DS) -SELECT -data:data:org_id::string, -data:data:event::string, -data:data:request_id::string, -data:data:submission_id::string, -data:data:item_data::string, -data:data:item_id::string, -data:data:item_type_name::string, -data:data:item_type_id::string, -data:data:item_type_schema::string, -data:data:item_type_kind::string, -data:data:item_type_schema_field_roles::object, -data:data:item_type_version::string, -data:data:item_type_schema_variant::string, -data:data:item_creator_id::string, -data:data:item_creator_type_id::string, -data:data:failure_reason::string, -to_timestamp(data:data:ts::number, 3), -ds -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''CONTENT_API_REQUESTS''; -INSERT INTO REPORTING_SERVICE.REPORTS ( -ORG_ID, -REQUEST_ID, -REPORTER_USER_ID, -REPORTER_USER_ITEM_TYPE_ID, -REPORTER_KIND, -REPORTED_AT, -POLICY_ID, -REPORTED_FOR_REASON, -REPORTED_ITEM_DATA, -REPORTED_ITEM_ID, -REPORTED_ITEM_TYPE_ID, -REPORTED_ITEM_TYPE_KIND, -REPORTED_ITEM_TYPE_SCHEMA, -REPORTED_ITEM_TYPE_SCHEMA_FIELD_ROLES, -REPORTED_ITEM_TYPE_VERSION, -REPORTED_ITEM_TYPE_SCHEMA_VARIANT, -REPORTED_ITEM_THREAD, -ADDITIONAL_ITEMS, -TS -) -SELECT -data:data:org_id::string, -data:data:request_id::string, -data:data:reporter_user_id::string, -data:data:reporter_user_item_type_id::string, -data:data:reporter_kind::string, -TO_TIMESTAMP_NTZ(data:data:reported_at::string), -data:data:policy_id::string, -data:data:reported_for_reason::string, -data:data:reported_item_data::object, -data:data:reported_item_id::string, -data:data:reported_item_type_id::string, -data:data:reported_item_type_kind::string, -data:data:reported_item_type_schema::array, -data:data:reported_item_type_schema_field_roles::object, -data:data:reported_item_type_version::string, -data:data:reported_item_type_schema_variant::string, -data:data:reported_item_thread::array, -COALESCE(data:data:additional_items, [])::array, -TO_TIMESTAMP_NTZ(data:data:ts::string) -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''REPORTING_SERVICE.REPORTS''; -INSERT INTO NCMEC_SERVICE.NCMEC_JOBS ( -ORG_ID, -REPORTED_ITEM_DATA, -REPORTED_ITEM_ID, -REPORTED_ITEM_TYPE_ID, -REPORTED_ITEM_TYPE_KIND, -REPORTED_ITEM_TYPE_SCHEMA, -REPORTED_ITEM_TYPE_SCHEMA_FIELD_ROLES, -REPORTED_ITEM_TYPE_VERSION, -REPORTED_ITEM_TYPE_SCHEMA_VARIANT, -REPORTED_ITEM_SUBMISSION_ID, -ENQUEUE_SOURCE, -REENQUEUED_FROM, -TS -) -SELECT -data:data:org_id::string, -data:data:reported_item_data::object, -data:data:reported_item_id::string, -data:data:reported_item_type_id::string, -data:data:reported_item_type_kind::string, -data:data:reported_item_type_schema::array, -data:data:reported_item_type_schema_field_roles::object, -data:data:reported_item_type_version::string, -data:data:reported_item_type_schema_variant::string, -data:data:reported_item_submission_id::string, -data:data:enqueue_source::string, -data:data:reenqueued_from::object, -TO_TIMESTAMP_NTZ(data:data:ts::string) -FROM ingested_json_to_tables new_rows -WHERE METADATA$ACTION = ''INSERT'' -AND TARGET_TABLE = ''NCMEC_SERVICE.NCMEC_JOBS''; -COMMIT; -end; -'; - - --- ================================================================================ --- SCHEMA: REPORTING_SERVICE --- ================================================================================ - -create or replace schema REPORTING_SERVICE; - -create or replace TABLE REPORTING_SERVICE.APPEALS cluster by (TIME_SLICE(TS, 1, 'DAY'), org_id, appeal_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -REQUEST_ID VARCHAR(16777216) NOT NULL, -APPEAL_ID VARCHAR(16777216) NOT NULL, -APPEALED_BY_USER_ID VARCHAR(16777216), -APPEALED_BY_USER_ITEM_TYPE_ID VARCHAR(16777216), -APPEALED_AT TIMESTAMP_NTZ(9) NOT NULL, -APPEAL_REASON VARCHAR(16777216), -ACTIONS_TAKEN ARRAY NOT NULL DEFAULT '[]', -ACTIONED_ITEM_DATA VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_ID VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_TYPE_SCHEMA VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT NOT NULL, -ACTIONED_ITEM_TYPE_VERSION VARCHAR(16777216) NOT NULL, -ACTIONED_ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) NOT NULL, -ADDITIONAL_ITEMS ARRAY NOT NULL DEFAULT '[]', -TS TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS cluster by (ds, org_id, passed, rule_id, LOWER(SUBSTRING(item_id, 0, 3)))( -RULE_NAME VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -RULE_VERSION TIMESTAMP_NTZ(9) NOT NULL, -RULE_ENVIRONMENT VARCHAR(16777216) NOT NULL, -ORG_ID VARCHAR(16777216) NOT NULL, -CORRELATION_ID VARCHAR(16777216) NOT NULL, -RESULT VARIANT NOT NULL, -PASSED BOOLEAN NOT NULL, -TS TIMESTAMP_NTZ(9) NOT NULL, -DS DATE NOT NULL, -POLICY_IDS ARRAY NOT NULL, -ITEM_DATA VARCHAR(16777216) NOT NULL, -ITEM_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_NAME VARCHAR(16777216) NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -ITEM_CREATOR_ID VARCHAR(16777216), -ITEM_CREATOR_TYPE_ID VARCHAR(16777216), -ITEM_TYPE_SCHEMA VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT NOT NULL, -ITEM_TYPE_VERSION VARCHAR(16777216) NOT NULL, -ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) NOT NULL, -POLICY_NAMES ARRAY -); - -create or replace TABLE REPORTING_SERVICE.REPORTING_RULE_EXECUTION_STATISTICS cluster by (ORG_ID, TIME_SLICE(TS_START_INCLUSIVE, 1, 'day'), RULE_ID)( -ORG_ID VARCHAR(16777216) NOT NULL, -RULE_ID VARCHAR(16777216) NOT NULL, -RULE_VERSION TIMESTAMP_NTZ(9) NOT NULL, -RULE_ENVIRONMENT VARCHAR(16777216), -RULE_POLICY_NAMES ARRAY, -RULE_POLICY_IDS ARRAY, -NUM_PASSES NUMBER(38,0) NOT NULL, -NUM_RUNS NUMBER(38,0) NOT NULL, -TS_START_INCLUSIVE TIMESTAMP_NTZ(9) NOT NULL, -TS_END_EXCLUSIVE TIMESTAMP_NTZ(9) NOT NULL -); - -create or replace TABLE REPORTING_SERVICE.REPORTS cluster by (TIME_SLICE(TS, 1, 'DAY'), org_id, policy_id, reporter_user_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -REQUEST_ID VARCHAR(16777216) NOT NULL, -REPORTER_USER_ID VARCHAR(16777216), -REPORTED_AT TIMESTAMP_NTZ(9) NOT NULL, -POLICY_ID VARCHAR(16777216), -REPORTED_FOR_REASON VARCHAR(16777216), -TS TIMESTAMP_NTZ(9) NOT NULL, -REPORTER_USER_ITEM_TYPE_ID VARCHAR(16777216), -REPORTER_KIND VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_ID VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_DATA OBJECT NOT NULL, -REPORTED_ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_TYPE_KIND VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_TYPE_SCHEMA ARRAY NOT NULL, -REPORTED_ITEM_TYPE_SCHEMA_FIELD_ROLES OBJECT NOT NULL, -REPORTED_ITEM_TYPE_SCHEMA_VARIANT VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_TYPE_VERSION VARCHAR(16777216) NOT NULL, -REPORTED_ITEM_THREAD ARRAY, -ADDITIONAL_ITEMS ARRAY NOT NULL DEFAULT '[]', -REPORTED_ITEMS_IN_THREAD ARRAY -); - -CREATE OR REPLACE FUNCTION REPORTING_SERVICE.REFORMAT_CONDITION_SIGNALS("V" VARIANT) -RETURNS VARIANT -LANGUAGE JAVASCRIPT -IMMUTABLE -AS ' -function reformatCondition(condition) { -if (condition.conditions) { -return { -...condition, -conditions: condition.conditions.map(it => reformatCondition(it)), -}; -} -const { signal } = condition; -// conditions w/ no signals stay as-is. -if(!signal) { -return condition; -} -// conditions w/ a valid signal id stay as-is. -if(signal.id && signal.id[0] === "{") { -return condition; -} -condition.signal.id = JSON.stringify({ type: signal.type }); -return condition; -} -return reformatCondition(V); -'; - -create or replace stream REPORTING_SERVICE.POPULATE_REPORTING_RULE_EXECUTION_STATISTICS_STREAM on table REPORTING_RULE_EXECUTIONS append_only = true; - -create or replace task REPORTING_SERVICE.POPULATE_REPORTING_RULE_EXECUTION_STATISTICS -schedule='5 MINUTE' -when SYSTEM$STREAM_HAS_DATA('reporting_service.populate_reporting_rule_execution_statistics_stream') -as MERGE INTO reporting_service.reporting_rule_execution_statistics -USING ( -SELECT -org_id, -rule_id, -rule_version, -rule_environment, --- Every execution row for a (org_id, rule_id, rule_version) group should --- have the same policy names + policy ids + tags, so we can pick any value. --- This is safe because a change to any of these values in the app would --- create a new rule version. -any_value(policy_names) as policy_names, -any_value(policy_ids) as policy_ids, -SUM(passed::number) as num_passes, -COUNT(*) as num_runs, -TIMESTAMP_NTZ_FROM_PARTS(year(ds), month(ds), day(ds), hour(ts), 0, 0) as ts_start -FROM reporting_service.populate_reporting_rule_execution_statistics_stream -WHERE METADATA$ACTION = 'INSERT' -GROUP BY org_id, rule_id, rule_version, rule_environment, ds, hour(ts) -) as executions -ON executions.ts_start = reporting_service.reporting_rule_execution_statistics.ts_start_inclusive -AND executions.rule_id = reporting_service.reporting_rule_execution_statistics.rule_id -AND executions.rule_version = reporting_service.reporting_rule_execution_statistics.rule_version -AND executions.rule_environment = reporting_service.reporting_rule_execution_statistics.rule_environment -WHEN MATCHED THEN -UPDATE -SET num_passes = (reporting_service.reporting_rule_execution_statistics.num_passes + executions.num_passes), -num_runs = (reporting_service.reporting_rule_execution_statistics.num_runs + executions.num_runs) -WHEN NOT MATCHED THEN -INSERT ( -org_id, -rule_id, -rule_version, -rule_policy_names, -rule_policy_ids, -rule_environment, -num_passes, -num_runs, -ts_start_inclusive, -ts_end_exclusive) -VALUES ( -executions.org_id, -executions.rule_id, -executions.rule_version, -executions.policy_names, -executions.policy_ids, -executions.rule_environment, -executions.num_passes, -executions.num_runs, -executions.ts_start, -timestampadd(hour, 1, executions.ts_start)); - --- ================================================================================ --- SCHEMA: RULE_ANOMALY_DETECTION_SERVICE --- ================================================================================ - -create or replace schema RULE_ANOMALY_DETECTION_SERVICE; - -create or replace TABLE RULE_ANOMALY_DETECTION_SERVICE.RULE_EXECUTION_STATISTICS ( -ORG_ID VARCHAR(16777216), -RULE_ID VARCHAR(16777216), -RULE_VERSION TIMESTAMP_NTZ(9), -NUM_PASSES NUMBER(38,0), -PASSES_DISTINCT_USER_IDS ARRAY, -NUM_RUNS NUMBER(38,0), -TS_START_INCLUSIVE TIMESTAMP_NTZ(9), -TS_END_EXCLUSIVE TIMESTAMP_NTZ(9) -); - -create or replace stream RULE_ANOMALY_DETECTION_SERVICE.RULE_STATS_STREAM on table RULE_EXECUTIONS append_only = true; - -create or replace task RULE_ANOMALY_DETECTION_SERVICE.POPULATE_RULE_STATS -schedule='5 MINUTE' -error_integration=AWS_NOTIFICATION_INTEGRATION -when SYSTEM$STREAM_HAS_DATA('rule_anomaly_detection_service.rule_stats_stream') -as MERGE INTO rule_anomaly_detection_service.rule_execution_statistics -USING ( -SELECT -org_id, -rule_id, -rule_version, -array_agg( -DISTINCT IFF( -passed AND -item_creator_id IS NOT NULL AND -item_creator_type_id IS NOT NULL, -OBJECT_CONSTRUCT( -'id', item_creator_id, -'typeId', item_creator_type_id), -NULL -) -) as passes_distinct_user_ids, -SUM(passed::number) as num_passes, -COUNT(*) as num_runs, -time_slice(ts, 1, 'hour') as ts_start -FROM rule_anomaly_detection_service.rule_stats_stream --- we don't care about executions from before versioning existed, --- which is beautiful. -WHERE rule_version IS NOT NULL -GROUP BY org_id, rule_id, rule_version, time_slice(ts, 1, 'hour') -) as executions -ON executions.ts_start = rule_execution_statistics.ts_start_inclusive -AND executions.rule_id = rule_execution_statistics.rule_id -AND executions.rule_version = rule_execution_statistics.rule_version -WHEN MATCHED THEN -UPDATE -SET num_passes = (rule_execution_statistics.num_passes + executions.num_passes), -num_runs = (rule_execution_statistics.num_runs + executions.num_runs), -passes_distinct_user_ids = -array_dcat(rule_execution_statistics.passes_distinct_user_ids, executions.passes_distinct_user_ids) -WHEN NOT MATCHED THEN -INSERT ( -org_id, -rule_id, -rule_version, -num_passes, -num_runs, -passes_distinct_user_ids, -ts_start_inclusive, -ts_end_exclusive) -VALUES ( -executions.org_id, -executions.rule_id, -executions.rule_version, -executions.num_passes, -executions.num_runs, -executions.passes_distinct_user_ids, -executions.ts_start, -timestampadd(hour, 1, executions.ts_start)); - --- ================================================================================ --- SCHEMA: USER_STATISTICS_SERVICE --- ================================================================================ - -create or replace schema USER_STATISTICS_SERVICE; - -create or replace TABLE USER_STATISTICS_SERVICE.LIFETIME_ACTION_STATS ( -ORG_ID VARCHAR(16777216) NOT NULL, -USER_ID VARCHAR(16777216) NOT NULL, -ACTION_ID VARCHAR(16777216) NOT NULL, -POLICY_ID VARCHAR(16777216), -ITEM_SUBMISSION_IDS ARRAY NOT NULL, -COUNT NUMBER(38,0), -USER_TYPE_ID VARCHAR(16777216) NOT NULL, -ACTOR_ID VARCHAR(16777216) -); - -create or replace TABLE USER_STATISTICS_SERVICE.SUBMISSION_STATS cluster by (org_id, user_type_id, user_id, TIME_SLICE(ts_start_inclusive, 1, 'day'), item_type_id)( -ORG_ID VARCHAR(16777216) NOT NULL, -USER_ID VARCHAR(16777216) NOT NULL, -ITEM_TYPE_ID VARCHAR(16777216) NOT NULL, -NUM_SUBMISSIONS NUMBER(38,0) NOT NULL, -TS_START_INCLUSIVE TIMESTAMP_NTZ(9) NOT NULL, -TS_END_EXCLUSIVE TIMESTAMP_NTZ(9) NOT NULL, -USER_TYPE_ID VARCHAR(16777216) -); - -create or replace TABLE USER_STATISTICS_SERVICE.USER_SCORES ( -ORG_ID VARCHAR(16777216) NOT NULL, -USER_ID VARCHAR(16777216) NOT NULL, -SCORE FLOAT NOT NULL, -SCORE_DATE TIMESTAMP_NTZ(9) NOT NULL, -USER_TYPE_ID VARCHAR(16777216) NOT NULL, -primary key (ORG_ID, USER_ID, USER_TYPE_ID, SCORE_DATE) -); - -create or replace stream USER_STATISTICS_SERVICE.NEW_ACTION_EXECUTIONS on table ACTION_EXECUTIONS append_only = true; - -create or replace stream USER_STATISTICS_SERVICE.NEW_CONTENT_SUBMISSIONS on table CONTENT_API_REQUESTS append_only = true; - -create or replace stream USER_STATISTICS_SERVICE.NEW_ITEM_SUBMISSIONS on table CONTENT_API_REQUESTS append_only = true; - -create or replace stream USER_STATISTICS_SERVICE."SUBMISSION_STATS_CONSUMER_user_scores_updater_STREAM" on table SUBMISSION_STATS; - -create or replace task USER_STATISTICS_SERVICE.POPULATE_LIFETIME_ACTION_STATS -schedule='5 MINUTE' -when SYSTEM$STREAM_HAS_DATA('user_statistics_service.new_action_executions') -as MERGE INTO user_statistics_service.lifetime_action_stats as stats -USING ( --- NB: have to group here because MERGE inserts are processed --- sorta in parallel, so a MERGE can't insert the same set of --- of values multiple times. -SELECT -ae.org_id, -CASE -WHEN ae.item_type_kind = 'CONTENT' OR ae.item_type_kind = 'THREAD' THEN ae.item_creator_id -WHEN ae.item_type_kind = 'USER' THEN ae.item_id -END as user_id, -CASE -WHEN ae.item_type_kind = 'CONTENT' OR ae.item_type_kind = 'THREAD' THEN ae.item_creator_type_id -WHEN ae.item_type_kind = 'USER' THEN ae.item_type_id -END as user_type_id, -ae.action_id, -policies.value:id::string as policy_id, -COUNT(*) as execution_count, -ae.actor_id, -array_agg(ae.item_submission_id) as item_submission_ids -FROM user_statistics_service.new_action_executions ae, --- NB: OUTER captures action executions that weren't associated with any policy. -LATERAL flatten(input => ae.policies, OUTER => TRUE) policies -WHERE METADATA$ACTION = 'INSERT' AND user_id IS NOT NULL AND user_type_id IS NOT NULL AND LENGTH(user_id) > 0 AND user_id != 'unknown' -GROUP BY org_id, user_id, user_type_id, action_id, policy_id, actor_id) as actions -ON actions.org_id = stats.org_id -AND actions.user_id = stats.user_id -AND actions.user_type_id = stats.user_type_id -AND actions.action_id = stats.action_id -AND actions.actor_id = stats.actor_id -AND actions.policy_id IS NOT DISTINCT FROM stats.policy_id -WHEN MATCHED THEN -UPDATE --- NB: this does not dedupe if the same action is run against the same --- submission multiple times, but that's rare enough that we don't care. -SET count = count + actions.execution_count, -item_submission_ids = array_cat( --- Workaround for https://community.snowflake.com/s/question/0D50Z00008aTEc0SAG/how-to-work-around-arraycat-throwing-an-error-with-a-null-param-in-a-merge-statement -coalesce(stats.item_submission_ids, array_construct()), -actions.item_submission_ids -) -WHEN NOT MATCHED THEN -INSERT (org_id, user_id, user_type_id, action_id, policy_id, count, item_submission_ids, actor_id) -VALUES ( -actions.org_id, -actions.user_id, -actions.user_type_id, -actions.action_id, -actions.policy_id, -actions.execution_count, -actions.item_submission_ids, -actions.actor_id); - -create or replace task USER_STATISTICS_SERVICE.POPULATE_SUBMISSION_STATS -schedule='5 MINUTE' -when SYSTEM$STREAM_HAS_DATA('user_statistics_service.new_item_submissions') -as MERGE INTO USER_STATISTICS_SERVICE.submission_stats as stats -USING ( -SELECT -org_id, -item_creator_id, -item_creator_type_id, -item_type_id, -COUNT(*) as "count", -TIME_SLICE(ts, 5, 'MINUTE', 'START') as ts_start_inclusive, -TIME_SLICE(ts, 5, 'MINUTE', 'END') as ts_end_exclusive -FROM user_statistics_service.new_item_submissions -WHERE "EVENT" = 'REQUEST_SUCCEEDED' AND METADATA$ACTION = 'INSERT' AND item_creator_id IS NOT NULL AND item_creator_type_id IS NOT NULL -GROUP BY org_id, item_creator_id, item_creator_type_id, item_type_id, ts_start_inclusive, ts_end_exclusive) as submissions -ON submissions.org_id = stats.org_id -AND submissions.item_creator_id = stats.user_id -AND submissions.item_creator_type_id = stats.user_type_id -AND submissions.item_type_id = stats.item_type_id -AND submissions.ts_start_inclusive = stats.ts_start_inclusive -WHEN MATCHED THEN -UPDATE SET num_submissions = num_submissions + "count" -WHEN NOT MATCHED THEN -INSERT (org_id, user_id, user_type_id, item_type_id, num_submissions, ts_start_inclusive, ts_end_exclusive) -VALUES ( -submissions.org_id, -submissions.item_creator_id, -submissions.item_creator_type_id, -submissions.item_type_id, -submissions."count", -submissions.ts_start_inclusive, -submissions.ts_end_exclusive); - diff --git a/.env.githubci b/.env.githubci index 0eaad88..6e080b2 100644 --- a/.env.githubci +++ b/.env.githubci @@ -73,9 +73,7 @@ KAFKA_SCHEMA_REGISTRY_HOST=http://schema-registry:8081 KAFKA_SCHEMA_REGISTRY_USERNAME= KAFKA_SCHEMA_REGISTRY_PASSWORD= KAFKAJS_NO_PARTITIONER_WARNING=1 -KAFKA_TOPIC_KEY_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS= KAFKA_TOPIC_KEY_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS= -KAFKA_TOPIC_VALUE_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS= KAFKA_TOPIC_VALUE_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS= KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS= KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS= diff --git a/.github/workflows/apply_pr_checks.yaml b/.github/workflows/apply_pr_checks.yaml index c3690ad..17723ff 100644 --- a/.github/workflows/apply_pr_checks.yaml +++ b/.github/workflows/apply_pr_checks.yaml @@ -97,7 +97,7 @@ jobs: # the datestamp. # # NB: The filename will look something like: - # 2022.12.22T03.39.16.test_snowflake_migration.(cjs|sql|cql) + # 2022.12.22T03.39.16.example_migration.(cjs|sql|cql) datestamp() { echo $(basename $1 | rev | cut -d . -f3- | rev) } @@ -153,8 +153,6 @@ jobs: if: needs.check_for_server_changes.outputs.result == 'true' runs-on: ubuntu-latest timeout-minutes: 15 - env: - SNOWFLAKE_DB_NAME: CI_DB_${{ github.run_id }} steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/.github/workflows/checklistConfig.json b/.github/workflows/checklistConfig.json index 61bb855..aef8107 100644 --- a/.github/workflows/checklistConfig.json +++ b/.github/workflows/checklistConfig.json @@ -22,13 +22,6 @@ "items": [ "If you're creating a new signal, did you check all the potential error cases, and classify, for each one, whether it should be thrown as a permanent error (not subject to retry) or just a normal error (which will lead the signal to being retried and the error value not cached)? **NOTE**: in our data model, any case in which the signal can not determine the score for the provided input should result in a SignalPermanentError." ] - }, - { - "paths": [".devops/migrator/src/scripts/snowflake/*"], - "triggers": ["create task", "alter task"], - "items": [ - "If you're creating a new snowflake task, did you set ERROR_INTEGRATION = 'AWS_NOTIFICATION_INTEGRATION'?" - ] } ] } diff --git a/Dockerfile b/Dockerfile index ce41ea2..a7ec5fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,14 +10,7 @@ FROM node:24.14.0-bullseye-slim AS server_base WORKDIR /app -# Append "--build-arg OMIT_SNOWFLAKE='true'" to your call to avoid installing -# optional snowflake-promise dependency -ARG OMIT_SNOWFLAKE - COPY ["server/package.json", "server/package-lock.json", "./"] -RUN if [ "$OMIT_SNOWFLAKE" = "true" ]; then \ - npm pkg set overrides.snowflake-promise='npm:empty-module@^1.0.0'; \ - fi RUN npm ci COPY ["server", "./"] diff --git a/README.md b/README.md index 6870be2..da1ed57 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ We're developing Coop in the open and want to hear from you! Whether you're test * **Frontend**: React-based client application, AntDesign, GraphQL, TailwindCSS * **Infrastructure**: Docker, Kubernetes * **Model Service:** Python-based machine learning services. -* **Databases**: PostgreSQL, Snowflake, Scylla +* **Databases**: PostgreSQL, ClickHouse, Scylla * **Caching**: Redis * **Utility Services**: Database migrators, instrumentation, and proxy layers. @@ -84,7 +84,7 @@ npm install \ ### **Database Structure and Migrations** -All of the data around the database tables ( SQL/Schema ) exist under the `.devops/migrator/src/scripts` folder where there is a folder for each service. ( api, scylla, snowflake, model service ) +All of the data around the database tables ( SQL/Schema ) exist under the `.devops/migrator/src/scripts` folder where there is a folder for each service (for example `api-server-pg`, `clickhouse`, `scylla`). ### **Management Scripts** diff --git a/docker-compose.yaml b/docker-compose.yaml index 0604869..0dd462f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,15 +15,6 @@ services: working_dir: /src env_file: ./.env.githubci environment: - # when running migrations locally, you must set these to target your - # personal db, as in: - # - # docker compose run \ - # -e SNOWFLAKE_ROLE=ACCOUNTADMIN \ - # -e SNOWFLAKE_USERNAME=YOUR_USERNAME \ - # -e SNOWFLAKE_PASSWORD='YOURPASSWORD' \ - # -e SNOWFLAKE_DB_NAME=YOURDB \ - # migrations - MIGRATOR_DB_NAME - CLICKHOUSE_DATABASE volumes: @@ -42,15 +33,6 @@ services: working_dir: /src env_file: ./.env.githubci environment: - # when running migrations locally, you must set these to target your - # personal db, as in: - # - # docker compose run \ - # -e SNOWFLAKE_ROLE=ACCOUNTADMIN \ - # -e SNOWFLAKE_USERNAME=YOUR_USERNAME \ - # -e SNOWFLAKE_PASSWORD='YOURPASSWORD' \ - # -e SNOWFLAKE_DB_NAME=YOURDB \ - # drop_dbs - CLICKHOUSE_DATABASE - MIGRATOR_DB_NAME volumes: @@ -151,8 +133,6 @@ services: context: . dockerfile: Dockerfile target: server_base - args: - - OMIT_SNOWFLAKE command: bash -c 'npm run test:ci' working_dir: /app volumes: diff --git a/docs/DATA_WAREHOUSE_ABSTRACTION.md b/docs/DATA_WAREHOUSE_ABSTRACTION.md index 102068f..dea165f 100644 --- a/docs/DATA_WAREHOUSE_ABSTRACTION.md +++ b/docs/DATA_WAREHOUSE_ABSTRACTION.md @@ -2,7 +2,7 @@ ## Overview -The data warehouse abstraction allows you to use **any data warehouse** (Snowflake, Clickhouse, PostgreSQL, BigQuery, Redshift, Databricks, etc.) without changing application code. Define your warehouse settings by changing one environment variable. +The data warehouse abstraction allows you to use **any data warehouse** (Clickhouse, PostgreSQL, BigQuery, Redshift, Databricks, etc.) without changing application code. Define your warehouse settings by changing one environment variable. ## Quick Start @@ -29,20 +29,6 @@ export default inject(['DataWarehouse'], MyService); Select adapters with `WAREHOUSE_ADAPTER` and (optionally) `ANALYTICS_ADAPTER`. Legacy deployments can keep using `DATA_WAREHOUSE_PROVIDER`; it is still accepted as a fallback. -### Snowflake -```bash -WAREHOUSE_ADAPTER=snowflake -ANALYTICS_ADAPTER=snowflake -# Legacy fallback: -DATA_WAREHOUSE_PROVIDER=snowflake -SNOWFLAKE_ACCOUNT=your_account -SNOWFLAKE_USERNAME=user -SNOWFLAKE_PASSWORD=pass -SNOWFLAKE_DB_NAME=analytics -SNOWFLAKE_WAREHOUSE=COMPUTE_WH -SNOWFLAKE_SCHEMA=PUBLIC -``` - ### PostgreSQL ```bash WAREHOUSE_ADAPTER=postgresql @@ -120,42 +106,24 @@ export default inject(['DataWarehouseAnalytics'], RuleExecutionLogger); **What happens:** 1. Service calls `logger.logRuleExecutions(data)` 2. Logger calls `analytics.bulkWrite('RULE_EXECUTIONS', data)` -3. For **Snowflake**: Buffers → Kafka → Worker → Snowflake (high-throughput) -4. For **Clickhouse**: Chunked JSONEachRow inserts over HTTP (default batches of 500 rows) -5. For **PostgreSQL**: Buffers → COPY or batch INSERT +3. For **Clickhouse**: Chunked JSONEachRow inserts over HTTP (default batches of 500 rows) +4. For **PostgreSQL**: Buffers → COPY or batch INSERT **No warehouse-specific code in loggers!** They just call `bulkWrite()`. ### Data Flow -#### Snowflake (High-Throughput) +#### Clickhouse / PostgreSQL (direct) ``` RuleExecutionLogger ↓ DataWarehouseAnalytics.bulkWrite() ↓ -SnowflakeAnalyticsAdapter - ↓ -DataLoader (batches 200 rows) +ClickhouseAnalyticsAdapter / PostgresAnalyticsAdapter ↓ -Kafka Topic: DATA_WAREHOUSE_INGEST_EVENTS +HTTP JSONEachRow (Clickhouse) or batched INSERT (PostgreSQL) ↓ -SnowflakeIngestionWorker - ↓ -Snowflake Tables -``` - -#### Clickhouse/PostgreSQL (Direct) -``` -RuleExecutionLogger - ↓ -DataWarehouseAnalytics.bulkWrite() - ↓ -ClickhouseAnalyticsAdapter - ↓ -Chunk rows (default size 500) - ↓ -HTTP JSONEachRow INSERT into Clickhouse +Analytics tables ``` ## Required Tables @@ -173,19 +141,6 @@ ClickHouse DDL lives alongside the rest of our migrations at **Migration examples:** -### Snowflake -```sql -CREATE TABLE RULE_EXECUTIONS ( - DS DATE, - TS NUMBER, - ORG_ID VARCHAR, - RULE_ID VARCHAR, - PASSED BOOLEAN, - RESULT VARIANT, -- JSON - -- ... ~20 more fields, see IDataWarehouseAnalytics.ts -); -``` - ### Clickhouse ```sql CREATE TABLE rule_executions ( @@ -322,7 +277,7 @@ CREATE TABLE rule_executions ( item_id VARCHAR, rule_id VARCHAR, passed BOOLEAN, - result JSON, -- Or VARIANT, JSONB, String depending on warehouse + result JSON, -- Or JSONB, String depending on warehouse -- ... see IDataWarehouseAnalytics.ts for all ~20 fields ); ``` @@ -366,8 +321,7 @@ class UserHistoryQueries { export default inject(['DataWarehouseDialect'], UserHistoryQueries); ``` -**Works with any warehouse:** -- Snowflake: Uses SnowflakeDialect +**Works with any supported warehouse:** - Clickhouse: Uses ClickhouseDialect - PostgreSQL: Uses PostgresDialect @@ -392,12 +346,10 @@ server/storage/dataWarehouse/ └── index.ts server/plugins/warehouse/ # Pluggable warehouse adapters -├── adapters/SnowflakeWarehouseAdapter.ts ├── examples/NoOpWarehouseAdapter.ts └── ... server/plugins/analytics/ # Pluggable analytics adapters -├── adapters/SnowflakeAnalyticsAdapter.ts ├── examples/NoOpAnalyticsAdapter.ts └── ... @@ -416,8 +368,7 @@ server/services/analyticsQueries/ # Warehouse-agnostic queries ## References - **Schema types:** `/server/storage/dataWarehouse/IDataWarehouseAnalytics.ts` -- **Snowflake warehouse adapter:** `/server/plugins/warehouse/adapters/SnowflakeWarehouseAdapter.ts` -- **Snowflake analytics adapter:** `/server/plugins/analytics/adapters/SnowflakeAnalyticsAdapter.ts` -- **Migration setup:** `/.devops/migrator/src/configs/snowflake.ts` +- **Clickhouse:** `server/plugins/warehouse` and `server/plugins/analytics` adapters +- **PostgreSQL migrations:** `.devops/migrator/src/scripts/api-server-pg/` (app DB); analytics tables may live in a dedicated analytics database per deployment - **Loggers:** `/server/services/analyticsLoggers/` - **Queries:** `/server/services/analyticsQueries/` diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 845c69b..0482e01 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -90,8 +90,7 @@ npm run db:drop # Drop database .devops/migrator/src/scripts/ ├── api-server-pg/ # PostgreSQL ├── clickhouse/ # ClickHouse -├── scylla/ # ScyllaDB -└── snowflake/ # Snowflake (optional) +└── scylla/ # ScyllaDB ``` ## Running the Application diff --git a/migrator/script-templates/sequelize-snowflake.cjs b/migrator/script-templates/sequelize-snowflake.cjs deleted file mode 100644 index 3fac1bb..0000000 --- a/migrator/script-templates/sequelize-snowflake.cjs +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -// NB: Snowflake migrations should use raw queries, in case Sequelize doesn't -// translate the query correctly. Also, Snowflake only supports 1 SQL statement -// per API call. So Snowflake migrations should use sequential, raw `query` calls. - -/** - * @param {{ context: import("sequelize").QueryInterface }} context - */ -exports.up = async function ({ context }) { - const query = context.sequelize.query.bind(context.sequelize); -}; - -/** - * @param {{ context: import("sequelize").QueryInterface }} context - */ -exports.down = async function ({ context }) { - const query = context.sequelize.query.bind(context.sequelize); -}; diff --git a/server/.env.example b/server/.env.example index 91927a1..9996e8b 100644 --- a/server/.env.example +++ b/server/.env.example @@ -26,12 +26,6 @@ CLICKHOUSE_PASSWORD=clickhouse CLICKHOUSE_DATABASE=analytics CLICKHOUSE_PROTOCOL=http -# Snowflake Personal Account Credentials -SNOWFLAKE_USERNAME= -SNOWFLAKE_PASSWORD= -SNOWFLAKE_DB_NAME=MY_DEV_DB -SNOWFLAKE_ACCOUNT= - HMA_SERVICE_URL=http://localhost:9876 # Kafka authentication info. @@ -47,19 +41,13 @@ KAFKAJS_NO_PARTITIONER_WARNING=1 # different in our future local dev setup. Eventually, we'll likely want # a more sophisticated approach than env vars for determining these values, # but we need to figure out our Kafka schema migration system first. -KAFKA_TOPIC_KEY_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS= KAFKA_TOPIC_KEY_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS= -KAFKA_TOPIC_VALUE_SCHEMA_ID_SNOWFLAKE_INGEST_EVENTS= KAFKA_TOPIC_VALUE_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS= KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS= KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS= KAFKA_TOPIC_KEY_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0= KAFKA_TOPIC_VALUE_SCHEMA_ID_ITEM_SUBMISSION_EVENTS_RETRY_0= -# Bucket info for moving pg data in bulk into Snowflake -SNOWFLAKE_S3_BUCKET_NAME= -SNOWFLAKE_S3_BUCKET_REGION=us-east-2 - # Scylla Cluster Details SCYLLA_USERNAME=cassandra SCYLLA_PASSWORD=cassandra @@ -71,7 +59,6 @@ NODE_ENV=development EXPOSE_SENSITIVE_IMPLEMENTATION_DETAILS_IN_ERRORS=true ALLOW_USER_INPUT_LOCALHOST_URIS=true SEQUELIZE_PRINT_LOGS=true -SNOWFLAKE_PRINT_LOGS=true # Redis Credentials REDIS_USE_CLUSTER=false diff --git a/server/.eslintrc.cjs b/server/.eslintrc.cjs index 2eb42be..ff764f7 100644 --- a/server/.eslintrc.cjs +++ b/server/.eslintrc.cjs @@ -24,7 +24,7 @@ const logJsonSelector = 'CallExpression[callee.name="logJson"]'; const logErrorJsonSelector = 'CallExpression[callee.name="logErrorJson"]'; const unmanagedSequelizeTransactionSelector = - 'CallExpression[arguments.length=0] > MemberExpression[property.name="transaction"][object.name!=/pgQuery|snowflake|kysely|pg/][object.object.type!="ThisExpression"]'; + 'CallExpression[arguments.length=0] > MemberExpression[property.name="transaction"][object.name!=/pgQuery|kysely|pg/][object.object.type!="ThisExpression"]'; const badHttpClientsImportSelector = 'ImportDeclaration[source.value=/^(axios|node-fetch)$/]'; @@ -327,7 +327,6 @@ const maintainabilityReadabilityRules = { { target: [ './services', - './snowflake', './routes', './rule_engine', './workers_jobs', diff --git a/server/.gitignore b/server/.gitignore index 6d8c34f..060dfba 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -2,5 +2,4 @@ node_modules/ build/ .eslintcache transpiled/ -snowflake.log reports diff --git a/server/README.md b/server/README.md index e0b3349..11f3f67 100644 --- a/server/README.md +++ b/server/README.md @@ -34,7 +34,7 @@ Sometimes you may want to capture a unit of work in its own span in which case y ```js return tracer.addActiveSpan( - { resource: 'snowflake.client', operation: 'snowflake.query' }, + { resource: 'dataWarehouse.query', operation: 'query' }, (span) => { // do work } diff --git a/server/decs.d.ts b/server/decs.d.ts index 5ec3e96..91101c0 100644 --- a/server/decs.d.ts +++ b/server/decs.d.ts @@ -242,14 +242,6 @@ namespace NodeJS { DATABASE_USER?: string; DATABASE_PASSWORD?: string; SESSION_SECRET?: string; - SNOWFLAKE_USERNAME?: string; - SNOWFLAKE_PASSWORD?: string; - SNOWFLAKE_DB_NAME?: string; - SNOWFLAKE_ACCOUNT?: string; - SNOWFLAKE_ROLE?: string; - SNOWFLAKE_SCHEMA?: string; - SNOWFLAKE_WAREHOUSE?: string; - SNOWFLAKE_POOL_SIZE?: string; WAREHOUSE_ADAPTER?: string; ANALYTICS_ADAPTER?: string; DATA_WAREHOUSE_PROVIDER?: string; @@ -262,13 +254,10 @@ namespace NodeJS { KAFKAJS_NO_PARTITIONER_WARNING?: string; KAFKA_TOPIC_KEY_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS?: string; KAFKA_TOPIC_VALUE_SCHEMA_ID_DATA_WAREHOUSE_INGEST_EVENTS?: string; - SNOWFLAKE_S3_BUCKET_NAME?: string; - SNOWFLAKE_S3_BUCKET_REGION?: string; NODE_ENV?: string; EXPOSE_SENSITIVE_IMPLEMENTATION_DETAILS_IN_ERRORS?: string; ALLOW_USER_INPUT_LOCALHOST_URIS?: string; SEQUELIZE_PRINT_LOGS?: string; - SNOWFLAKE_PRINT_LOGS?: string; REDIS_USE_CLUSTER?: string; REDIS_HOST?: string; REDIS_PORT?: string; diff --git a/server/graphql/datasources/RuleApi.ts b/server/graphql/datasources/RuleApi.ts index f73d530..1d66c0e 100644 --- a/server/graphql/datasources/RuleApi.ts +++ b/server/graphql/datasources/RuleApi.ts @@ -39,7 +39,7 @@ import { type SignalId, } from '../../services/signalsService/index.js'; import { type ConditionSetWithResultAsLogged } from '../../services/analyticsLoggers/index.js'; -import { type SnowflakePublicSchema } from '../../snowflake/types.js'; +import { type DataWarehousePublicSchema } from '../../storage/dataWarehouse/warehouseSchema.js'; import { toCorrelationId } from '../../utils/correlationIds.js'; import { jsonParse, @@ -268,9 +268,11 @@ function parseAggregationClauseInput( * GraphQL Object for a Rule */ class RuleAPI extends DataSource { + private readonly warehouse: Kysely; + constructor( private readonly knex: Dependencies['Knex'], - private readonly snowflake: Kysely, + dialect: Dependencies['DataWarehouseDialect'], public readonly ruleInsights: Dependencies['RuleActionInsights'], private readonly actionStats: Dependencies['ActionStatisticsService'], private readonly models: Dependencies['Sequelize'], @@ -278,6 +280,7 @@ class RuleAPI extends DataSource { private readonly signalsService: Dependencies['SignalsService'], ) { super(); + this.warehouse = dialect.getKyselyInstance() as Kysely; } async getGraphQLRuleFromId(id: string, orgId: string) { @@ -671,7 +674,7 @@ class RuleAPI extends DataSource { // // to be aware of all our WHERE clause filters and their implications for // // the other columns. // // prettier-ignore - // this.getItemSubmissionsFromSnowflake({ + // this.getItemSubmissionsFromWarehouse({ // orgId: user.orgId, // randomSample: true, // numRows: input.sampleDesiredSize, @@ -716,7 +719,7 @@ class RuleAPI extends DataSource { const allResultsQuery = this.knex('RULE_EXECUTIONS') .select({ // This select is aliasing each column to the corresponding object key, - // so we have to do fewer renames from snowflakes ALL_CAPS_SNAKE_CASE + // so we have to do fewer renames from the warehouse ALL_CAPS_SNAKE_CASE // when we return the final result. date: 'DS', ts: 'TS', @@ -769,7 +772,7 @@ class RuleAPI extends DataSource { : takeLast(filteredResultsQuery, [desiredSort], count); const results = ( - await sql`${sql.raw(finalQuery.toString())}`.execute(this.snowflake) + await sql`${sql.raw(finalQuery.toString())}`.execute(this.warehouse) ).rows; return results.map((it: any) => ({ @@ -813,7 +816,7 @@ class RuleAPI extends DataSource { // } // const id = uid(); - // const submissions = await this.getItemSubmissionsFromSnowflake({ + // const submissions = await this.getItemSubmissionsFromWarehouse({ // orgId: user.orgId, // itemTypeIds: ruleContentTypes.map((ct) => ct.id), // randomSample: false, @@ -910,7 +913,7 @@ class RuleAPI extends DataSource { export default inject( [ 'Knex', - 'KyselySnowflake', + 'DataWarehouseDialect', 'RuleActionInsights', 'ActionStatisticsService', 'Sequelize', diff --git a/server/graphql/modules/rule.ts b/server/graphql/modules/rule.ts index 3891a19..15a6e5a 100644 --- a/server/graphql/modules/rule.ts +++ b/server/graphql/modules/rule.ts @@ -110,7 +110,7 @@ const typeDefs = /* GraphQL */ ` # conditions, and each of their results, on a single piece of content. # It's identical to the backend TS type ConditionSetWithResultAsLogged, # because it only has the subset of the fields that we bother to store in - # Snowflake about a rule execution. + # the data warehouse about a rule execution. type ConditionSetWithResult { conjunction: ConditionConjunction conditions: [ConditionWithResult!]! diff --git a/server/iocContainer/index.ts b/server/iocContainer/index.ts index b3fa306..8edcc2f 100644 --- a/server/iocContainer/index.ts +++ b/server/iocContainer/index.ts @@ -187,10 +187,6 @@ import { type UserScore, } from '../services/userStatisticsService/index.js'; import { UserStrikeService } from '../services/userStrikeService/index.js'; -import { - type DataWarehouseOutboxKafkaMessageKey, - type DataWarehouseOutboxKafkaMessageValue, -} from '../snowflake/snowflake.js'; import { makeActionExecutionLogger, makeContentApiLogger, @@ -223,15 +219,10 @@ import { import type { IDataWarehouseAnalytics } from '../storage/dataWarehouse/IDataWarehouseAnalytics.js'; import { ClickhouseActionStatisticsAdapter, - SnowflakeActionStatisticsAdapter, ClickhouseReportingAnalyticsAdapter, - SnowflakeReportingAnalyticsAdapter, ClickhouseActionExecutionsAdapter, - SnowflakeActionExecutionsAdapter, ClickhouseContentApiRequestsAdapter, - SnowflakeContentApiRequestsAdapter, ClickhouseOrgCreationAdapter, - SnowflakeOrgCreationAdapter, } from '../plugins/warehouse/queries/index.js'; import type { IActionStatisticsAdapter } from '../plugins/warehouse/queries/IActionStatisticsAdapter.js'; import type { IReportingAnalyticsAdapter } from '../plugins/warehouse/queries/IReportingAnalyticsAdapter.js'; @@ -258,6 +249,17 @@ import { registerGqlDataSources } from './services/gqlDataSources.js'; import { registerWorkersAndJobs } from './services/workersAndJobs.js'; import { register, safeGetEnvVar } from './utils.js'; +type DataWarehouseOutboxKafkaMessageKey = { + orgId: string; + userId: string; +}; + +type DataWarehouseOutboxKafkaMessageValue = { + dataJSON: string; + table: string; + recordedAt: Date; +}; + // the otel instrumentation currently intercepts require statements. support for // esm support is experimental so we should wait until it is stable const require = createRequire(import.meta.url); @@ -363,20 +365,13 @@ export interface Dependencies { ContentApiRequestsAdapter: IContentApiRequestsAdapter; OrgCreationAdapter: IOrgCreationAdapter; - // Deprecated Snowflake aliases - use DataWarehouse/DataWarehouseDialect instead - // Kept for backward compatibility with services that haven't migrated yet - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Snowflake: IDataWarehouse; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - KyselySnowflake: Kysely; - itemSubmissionQueueBulkWrite: ItemQueueBulkWrite; itemSubmissionRetryQueueBulkWrite: ItemQueueBulkWrite; Knex: Knex; IORedis: IORedis.Redis | Cluster; // We register the services as Kafka so that each service that depends // on Kafka can type its arg more specifically, based on the topic that - // it's supposed to be able to "see". E.g., the Snowflake Ingestion Worker can type + // it's supposed to be able to "see". E.g., a worker can type // its argument as `Kafka>`, so that its code can only // read messages from the topic with the intended schema, and the `Kafka` // service will be assignable to that argument because of the `any`. @@ -718,125 +713,45 @@ export default async function getBottle() { bottle.factory('DataWarehouseAnalytics', (container) => { const config = DataWarehouseFactory.createConfigFromEnv(); - const enhancedConfig = { - ...config, - kafka: config.provider === 'snowflake' ? container.Kafka : undefined, - }; return DataWarehouseFactory.createAnalyticsAdapter( - enhancedConfig, + config, container.DataWarehouseDialect, ); }); bottle.factory('ActionStatisticsAdapter', (container) => { - const config = DataWarehouseFactory.createConfigFromEnv(); - // eslint-disable-next-line switch-statement/require-appropriate-default-case - switch (config.provider) { - case 'clickhouse': - return new ClickhouseActionStatisticsAdapter( - container.DataWarehouse, - container.Tracer, - ); - case 'snowflake': - return new SnowflakeActionStatisticsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - default: - return new SnowflakeActionStatisticsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - } + return new ClickhouseActionStatisticsAdapter( + container.DataWarehouse, + container.Tracer, + ); }); bottle.factory('OrgCreationAdapter', (container) => { - const config = DataWarehouseFactory.createConfigFromEnv(); - // eslint-disable-next-line switch-statement/require-appropriate-default-case - switch (config.provider) { - case 'clickhouse': - return new ClickhouseOrgCreationAdapter( - container.DataWarehouse, - container.Tracer, - ); - case 'snowflake': - return new SnowflakeOrgCreationAdapter( - container.DataWarehouse, - container.Tracer, - ); - default: - return new SnowflakeOrgCreationAdapter( - container.DataWarehouse, - container.Tracer, - ); - } + return new ClickhouseOrgCreationAdapter( + container.DataWarehouse, + container.Tracer, + ); }); bottle.factory('ReportingAnalyticsAdapter', (container) => { - const config = DataWarehouseFactory.createConfigFromEnv(); - // eslint-disable-next-line switch-statement/require-appropriate-default-case - switch (config.provider) { - case 'clickhouse': - return new ClickhouseReportingAnalyticsAdapter( - container.DataWarehouse, - container.Tracer, - ); - case 'snowflake': - return new SnowflakeReportingAnalyticsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - default: - return new SnowflakeReportingAnalyticsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - } + return new ClickhouseReportingAnalyticsAdapter( + container.DataWarehouse, + container.Tracer, + ); }); bottle.factory('ActionExecutionsAdapter', (container) => { - const config = DataWarehouseFactory.createConfigFromEnv(); - // eslint-disable-next-line switch-statement/require-appropriate-default-case - switch (config.provider) { - case 'clickhouse': - return new ClickhouseActionExecutionsAdapter( - container.DataWarehouse, - container.Tracer, - ); - case 'snowflake': - return new SnowflakeActionExecutionsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - default: - return new SnowflakeActionExecutionsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - } + return new ClickhouseActionExecutionsAdapter( + container.DataWarehouse, + container.Tracer, + ); }); bottle.factory('ContentApiRequestsAdapter', (container) => { - const config = DataWarehouseFactory.createConfigFromEnv(); - // eslint-disable-next-line switch-statement/require-appropriate-default-case - switch (config.provider) { - case 'clickhouse': - return new ClickhouseContentApiRequestsAdapter( - container.DataWarehouse, - container.Tracer, - ); - case 'snowflake': - return new SnowflakeContentApiRequestsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - default: - return new SnowflakeContentApiRequestsAdapter( - container.DataWarehouseDialect.getKyselyInstance(), - ); - } - }); - - // Snowflake-specific utilities - delegate to abstraction - bottle.factory('Snowflake', (container) => { - return container.DataWarehouse; - }); - - bottle.factory('KyselySnowflake', (container) => { - return container.DataWarehouseDialect.getKyselyInstance(); + return new ClickhouseContentApiRequestsAdapter( + container.DataWarehouse, + container.Tracer, + ); }); bottle.factory('itemSubmissionQueueBulkWrite', (container) => @@ -847,12 +762,6 @@ export default async function getBottle() { ); // Legacy service deprecated in favor of kysely. - // NB: for knex, we're using the pg dialect because it's the closest one to - // Snowflake, which knex doesn't support explicitly. The only difference - // should be, since Knex quotes all identifiers, that we have to make sure we - // pass in UPPER_CASE identifiers, as the canonical form of Snowflake - // identifiers (which is the form that must be provided in quoted identifier - // references) is usually uppercase. bottle.value( 'Knex', knexPkg.default.knex({ @@ -1470,7 +1379,7 @@ export default async function getBottle() { break; case 'NCMEC': // TODO: the NCMEC service is currently in charge of NCMEC job - // enrichment, but once we replace the NCMEC snowflake job with + // enrichment, but once we replace the NCMEC warehouse job with // Scylla we should move it back into the MRT service await container.NcmecService.enqueueForHumanReviewIfApplicable( { @@ -1744,7 +1653,7 @@ export default async function getBottle() { bottle.factory('closeSharedResourcesForShutdown', (container) => { // NB: we have to be careful that calling this shutdown function doesn't // _start up_ any of these shared services that it'd be shutting down (like - // a snowflake connection). Inadvertently starting up services when we're + // a data warehouse connection). Inadvertently starting up services when we're // trying to shut down would be ironic, but it would also cause big crashes, // as some of these services won't start correctly // in some contexts (e.g., in a worker that doesn't have the required @@ -1784,9 +1693,6 @@ export default async function getBottle() { | 'ItemTypeModel' | 'LocationBankModel' | 'LocationBankLocationModel' - // Deprecated services that delegate to DataWarehouse - | 'Snowflake' - | 'KyselySnowflake' // Services that don't need cleanup | 'UserStatisticsService' | 'HMAHashBankService' diff --git a/server/iocContainer/services/workersAndJobs.ts b/server/iocContainer/services/workersAndJobs.ts index 5b440f9..e5dc005 100644 --- a/server/iocContainer/services/workersAndJobs.ts +++ b/server/iocContainer/services/workersAndJobs.ts @@ -7,7 +7,6 @@ import makeItemProcessingWorker from '../../workers_jobs/ItemProcessingWorker.js import makeRefreshMRTDecisionsMaterializedViewJob from '../../workers_jobs/RefreshMRTDecisionsMaterializedViewJob.js'; import makeRetryFailedNcmecDecisionsJob from '../../workers_jobs/RetryFailedNcmecDecisionsJob.js'; import makeRunUserRulesJob from '../../workers_jobs/RunUserRulesJob.js'; -import makeSnowflakeIngestionToS3Worker from '../../workers_jobs/SnowflakeIngestionToS3Worker.js'; import { type Dependencies } from '../index.js'; import { register } from '../utils.js'; @@ -15,8 +14,6 @@ declare module '../index.js' { interface Dependencies { // NB: worker deps cannot be renamed // w/o breaking the kubernetes logic that starts them! - DumpToS3Worker: Worker; - SnowflakeIngestionToS3Worker: Worker; ItemProcessingWorker: Worker; // Jobs. Like workers, can't be renamed w/o breaking stuff. @@ -26,18 +23,12 @@ declare module '../index.js' { DetectRulePassRateAnomaliesJob: Job; RunUserRulesJob: Job; RefreshUserScoresCacheJob: Job; - IngestReportsIntoMRTJob: Job; RetryFailedNcmecDecisionsJob: Job; RefreshMRTDecisionsMaterializedViewJob: Job; } } export function registerWorkersAndJobs(bottle: Bottle) { - register( - bottle, - 'SnowflakeIngestionToS3Worker', - makeSnowflakeIngestionToS3Worker, - ); register(bottle, 'ItemProcessingWorker', makeItemProcessingWorker); register(bottle, 'RunUserRulesJob', makeRunUserRulesJob); register( diff --git a/server/package-lock.json b/server/package-lock.json index 9d2c12f..1c81dd1 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -134,9 +134,6 @@ "ts-node": "^10.9.1", "tsc-watch": "^4.6.0", "typescript": "^5.5.2" - }, - "optionalDependencies": { - "snowflake-promise": "^4.5.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1268,107 +1265,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.374.0.tgz", - "integrity": "sha512-v1Z6m0wwkf65/tKuhwrtPRqVoOtNkDTRn2MBMtxCwEw+8V8Q+YRFqVgGN+J1n53ktE0G5OYVBux/NHiAjJHReQ==", - "deprecated": "This package has moved to @smithy/node-http-handler", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/node-http-handler": "^1.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/node-http-handler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.1.0.tgz", - "integrity": "sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/abort-controller": "^1.1.0", - "@smithy/protocol-http": "^1.2.0", - "@smithy/querystring-builder": "^1.1.0", - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", - "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/querystring-builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.1.0.tgz", - "integrity": "sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^1.2.0", - "@smithy/util-uri-escape": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler/node_modules/@smithy/util-uri-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", - "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.972.6", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.6.tgz", @@ -1553,192 +1449,6 @@ "node": ">=18.0.0" } }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "license": "MIT", - "optional": true, - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-auth/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", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-http": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.5.tgz", - "integrity": "sha512-T8r2q/c3DxNu6mEJfPuJtptUVqwchxzjj32gKcnMi06rdiVONS9rar7kT9T2Am+XvER7uOzpsP79WsqNbdgdWg==", - "deprecated": "This package is no longer supported. Please refer to https://github.com/Azure/azure-sdk-for-js/blob/490ce4dfc5b98ba290dee3b33a6d0876c5f138e2/sdk/core/README.md", - "license": "MIT", - "optional": true, - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-tracing": "1.0.0-preview.13", - "@azure/core-util": "^1.1.1", - "@azure/logger": "^1.0.0", - "@types/node-fetch": "^2.5.0", - "@types/tunnel": "^0.0.3", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "process": "^0.11.10", - "tslib": "^2.2.0", - "tunnel": "^0.0.6", - "uuid": "^8.3.0", - "xml2js": "^0.5.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", - "license": "MIT", - "optional": true, - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-lro/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", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.0.0-preview.13", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", - "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "@opentelemetry/api": "^1.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "license": "MIT", - "optional": true, - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util/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", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/storage-blob": { - "version": "12.18.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.18.0.tgz", - "integrity": "sha512-BzBZJobMoDyjJsPRMLNHvqHycTGrT8R/dtcTx9qUFcqwSRfGVK9A/cZ7Nx38UQydT9usZGbaDCN75QRNjezSAA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-http": "^3.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.1.1", - "@azure/core-tracing": "1.0.0-preview.13", - "@azure/logger": "^1.0.0", - "events": "^3.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", @@ -2294,16 +2004,6 @@ "integrity": "sha512-QlGUMd3EaKkIRLCv0WW8Rw9cOlqhwQPT+ucNWY8eC4UALsMhJLpa0H7Cd7MYc9CEtTv/xlr3IcYw5Tdho4Hr2g==", "license": "Apache-2.0" }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2326,18 +2026,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "node_modules/@es-joy/jsdoccomment": { "version": "0.84.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.84.0.tgz", @@ -2483,285 +2171,34 @@ "teeny-request": "^10.0.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/@google-cloud/common/node_modules/@google-cloud/promisify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.1.0.tgz", - "integrity": "sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@google-cloud/paginator": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", - "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-5.0.0.tgz", - "integrity": "sha512-N8qS6dlORGHwk7WjGXKOSsLjIjNINCPicsOX6gyyLiYk7mq3MtII96NZ9N2ahwA2vnkLmZODOIH9rlNniYWvCQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@google-cloud/storage": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.18.0.tgz", - "integrity": "sha512-r3ZwDMiz4nwW6R922Z1pwpePxyRwE5GdevYX63hRmAQUkUQJcBH/79EnQPDv5cOv1mFBgevdNWQfi3tie3dHrQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@google-cloud/paginator": "^5.0.0", - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "<4.1.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "duplexify": "^4.1.3", - "fast-xml-parser": "^4.4.1", - "gaxios": "^6.0.2", - "google-auth-library": "^9.6.3", - "html-entities": "^2.5.2", - "mime": "^3.0.0", - "p-limit": "^3.0.1", - "retry-request": "^7.0.0", - "teeny-request": "^9.0.0", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/@google-cloud/promisify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", - "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@google-cloud/storage/node_modules/gaxios": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", - "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/gaxios/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@google-cloud/storage/node_modules/gaxios/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@google-cloud/storage/node_modules/gcp-metadata": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", - "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "gaxios": "^6.1.1", - "google-logging-utils": "^0.0.2", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/google-auth-library": { - "version": "9.15.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", - "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^6.1.1", - "gcp-metadata": "^6.1.0", - "gtoken": "^7.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/google-logging-utils": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", - "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/gtoken": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", - "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", - "license": "MIT", - "optional": true, - "dependencies": { - "gaxios": "^6.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/storage/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@google-cloud/storage/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google-cloud/storage/node_modules/retry-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", - "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/request": "^2.48.8", - "extend": "^3.0.2", - "teeny-request": "^9.0.0" - }, - "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@google-cloud/storage/node_modules/teeny-request": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", - "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "node_modules/@google-cloud/common/node_modules/@google-cloud/promisify": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.1.0.tgz", + "integrity": "sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==", "license": "Apache-2.0", - "optional": true, - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.9", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@google-cloud/storage/node_modules/teeny-request/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "optional": true, + "node_modules/@google-cloud/promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-5.0.0.tgz", + "integrity": "sha512-N8qS6dlORGHwk7WjGXKOSsLjIjNINCPicsOX6gyyLiYk7mq3MtII96NZ9N2ahwA2vnkLmZODOIH9rlNniYWvCQ==", + "license": "Apache-2.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, "node_modules/@google-cloud/translate": { @@ -4989,17 +4426,6 @@ "node": ">=18.0.0" } }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", - "license": "MIT", - "optional": true, - "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } - }, "node_modules/@stdlib/array-base-filled": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/@stdlib/array-base-filled/-/array-base-filled-0.0.2.tgz", @@ -10960,20 +10386,6 @@ "url": "https://www.patreon.com/athan" } }, - "node_modules/@techteamer/ocsp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@techteamer/ocsp/-/ocsp-1.0.1.tgz", - "integrity": "sha512-q4pW5wAC6Pc3JI8UePwE37CkLQ5gDGZMgjSX4MEEm4D4Di59auDQ8UNIDzC4gRnPNmmcwjpPxozq8p5pjiOmOw==", - "license": "MIT", - "optional": true, - "dependencies": { - "asn1.js": "^5.4.1", - "asn1.js-rfc2560": "^5.0.1", - "asn1.js-rfc5280": "^3.0.0", - "async": "^3.2.4", - "simple-lru-cache": "^0.0.2" - } - }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -11074,13 +10486,6 @@ "@types/node": "*" } }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "license": "MIT", - "optional": true - }, "node_modules/@types/cls-hooked": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.4.tgz", @@ -11358,37 +10763,6 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, - "node_modules/@types/request": { - "version": "2.48.13", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", - "integrity": "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.5" - } - }, - "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/@types/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", @@ -11457,30 +10831,6 @@ "@types/superagent": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/tunnel": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", - "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -12092,59 +11442,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", - "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", - "license": "MIT", - "optional": true, - "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -12700,49 +11997,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js-rfc2560": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", - "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", - "license": "MIT", - "optional": true, - "dependencies": { - "asn1.js-rfc5280": "^3.0.0" - }, - "peerDependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/asn1.js-rfc5280": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", - "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", - "license": "MIT", - "optional": true, - "dependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT", - "optional": true - }, "node_modules/async-hook-jl": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", @@ -12932,16 +12186,6 @@ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", - "optional": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -12950,12 +12194,6 @@ "node": "*" } }, - "node_modules/binascii": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/binascii/-/binascii-0.0.2.tgz", - "integrity": "sha512-rA2CrUl1+6yKrn+XgLs8Hdy18OER1UW146nM+ixzhQXDY+Bd3ySkyIJGwF2a4I45JwbvF1mDL/nWkqBwpOcdBA==", - "optional": true - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -12967,13 +12205,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT", - "optional": true - }, "node_modules/body-parser": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", @@ -13038,15 +12269,6 @@ "node": ">=8" } }, - "node_modules/browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==", - "engines": [ - "node" - ], - "optional": true - }, "node_modules/browserslist": { "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", @@ -13389,20 +12611,6 @@ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, - "node_modules/color": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13419,52 +12627,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12.20" - } - }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -14082,13 +13244,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT", - "optional": true - }, "node_modules/encode32": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/encode32/-/encode32-1.1.0.tgz", @@ -15100,16 +14255,6 @@ "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "optional": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -15151,19 +14296,6 @@ "node": ">=6" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "license": "MIT", - "optional": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expect": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", @@ -15345,35 +14477,6 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "node_modules/fast-xml-parser": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", - "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "strnum": "^1.1.1" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4.9.1" - } - }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -15391,13 +14494,6 @@ "bser": "2.1.1" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT", - "optional": true - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -15514,14 +14610,7 @@ "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT", - "optional": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -16439,19 +15528,6 @@ "node": ">=10.0.0" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "license": "MIT", - "optional": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/html-entities": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", @@ -16802,22 +15878,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -16940,7 +16000,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" }, @@ -17005,19 +16065,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -18058,13 +17105,6 @@ "node": ">=8" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT", - "optional": true - }, "node_modules/kysely": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.1.tgz", @@ -18198,24 +17238,6 @@ "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", "dev": true }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/loglevel": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", @@ -18419,13 +17441,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC", - "optional": true - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -18457,7 +17472,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "devOptional": true, + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -18884,16 +17899,6 @@ "wrappy": "1" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", - "optional": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -18909,23 +17914,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/openai": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/openai/-/openai-4.24.0.tgz", @@ -19104,16 +18092,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse-statements": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", @@ -19560,16 +18538,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -19730,16 +18698,6 @@ } ] }, - "node_modules/python-struct": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/python-struct/-/python-struct-1.1.3.tgz", - "integrity": "sha512-UsI/mNvk25jRpGKYI38Nfbv84z48oiIWwG67DLVvjRhy8B/0aIK+5Ju5WOHgw/o9rnEmbAS00v4rgKFQeC332Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "long": "^4.0.0" - } - }, "node_modules/qs": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", @@ -20560,12 +19518,6 @@ "simple-concat": "^1.0.0" } }, - "node_modules/simple-lru-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", - "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==", - "optional": true - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -20585,140 +19537,6 @@ "node": ">=8" } }, - "node_modules/snowflake-promise": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/snowflake-promise/-/snowflake-promise-4.5.0.tgz", - "integrity": "sha512-IFY7Y1alCTY1WRFPIEcgCbjy7wCajwLNnJsvw2L7xdePir7y5ohh+S00PnF9zFRGbfVVlRh/VYqOYHEfERK2lg==", - "license": "MIT", - "optional": true, - "dependencies": { - "snowflake-sdk": "^1.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/snowflake-sdk": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-1.15.0.tgz", - "integrity": "sha512-u7eNIT2JWkA8USJF6gTOCcReNrdh8V9LCazJi3F0XnX5ZJkgPz2gNSn67drT4ywqNaXdXfFM0i/yNSa58fi2Rg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/client-s3": "^3.388.0", - "@aws-sdk/node-http-handler": "^3.374.0", - "@azure/storage-blob": "12.18.x", - "@google-cloud/storage": "^7.7.0", - "@techteamer/ocsp": "1.0.1", - "asn1.js-rfc2560": "^5.0.0", - "asn1.js-rfc5280": "^3.0.0", - "axios": "^1.6.8", - "big-integer": "^1.6.43", - "bignumber.js": "^9.1.2", - "binascii": "0.0.2", - "bn.js": "^5.2.1", - "browser-request": "^0.3.3", - "expand-tilde": "^2.0.2", - "fast-xml-parser": "^4.2.5", - "fastest-levenshtein": "^1.0.16", - "generic-pool": "^3.8.2", - "glob": "^10.0.0", - "https-proxy-agent": "^7.0.2", - "jsonwebtoken": "^9.0.0", - "mime-types": "^2.1.29", - "mkdirp": "^1.0.3", - "moment": "^2.29.4", - "moment-timezone": "^0.5.15", - "open": "^7.3.1", - "python-struct": "^1.1.3", - "simple-lru-cache": "^0.0.2", - "toml": "^3.0.0", - "uuid": "^8.3.2", - "winston": "^3.1.0" - }, - "peerDependencies": { - "asn1.js": "^5.4.1" - } - }, - "node_modules/snowflake-sdk/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/snowflake-sdk/node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "license": "MIT", - "optional": true - }, - "node_modules/snowflake-sdk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/snowflake-sdk/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "optional": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/snowflake-sdk/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/snowflake-sdk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -20803,16 +19621,6 @@ "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "optional": true, - "engines": { - "node": "*" - } - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -21095,19 +19903,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "optional": true - }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -21340,13 +20135,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT", - "optional": true - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -21472,13 +20260,6 @@ "node": ">=0.6" } }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "license": "MIT", - "optional": true - }, "node_modules/toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", @@ -21489,16 +20270,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -21658,16 +20429,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -22324,44 +21085,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/winston": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", - "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", - "optional": true, - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -22502,30 +21225,6 @@ "xml-js": "bin/cli.js" } }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "license": "MIT", - "optional": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/xpath": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.34.tgz", diff --git a/server/package.json b/server/package.json index a3a3d22..ea7d69f 100644 --- a/server/package.json +++ b/server/package.json @@ -167,8 +167,5 @@ "apollo-server-express": { "@types/express": "npm:@types/express@4.17.17" } - }, - "optionalDependencies": { - "snowflake-promise": "^4.5.0" } } diff --git a/server/plugins/README.md b/server/plugins/README.md index ceafc6d..6e2450b 100644 --- a/server/plugins/README.md +++ b/server/plugins/README.md @@ -7,7 +7,7 @@ any particular warehouse or analytics vendor. The goals of this layout are: -- Allow first-party adapters (Snowflake, Clickhouse, Postgres, etc.) to live +- Allow first-party adapters (Clickhouse, Postgres, etc.) to live alongside community-provided ones without touching core code - Make it trivial for deployers to publish and consume custom adapters via NPM - Keep the contracts minimal so the abstractions do not leak complex diff --git a/server/plugins/analytics/adapters/SnowflakeAnalyticsAdapter.ts b/server/plugins/analytics/adapters/SnowflakeAnalyticsAdapter.ts deleted file mode 100644 index d3bd83c..0000000 --- a/server/plugins/analytics/adapters/SnowflakeAnalyticsAdapter.ts +++ /dev/null @@ -1,213 +0,0 @@ -import DataLoader from 'dataloader'; -import { CompressionTypes } from 'kafkajs'; -import { sql, CompiledQuery, type Kysely } from 'kysely'; - -import type { Kafka, KafkaProducer } from '../../../kafka/index.js'; -import { jsonStringifyUnstable } from '../../../utils/encoding.js'; -import { sleep } from '../../../utils/misc.js'; -import type SafeTracer from '../../../utils/SafeTracer.js'; -import type { IAnalyticsAdapter } from '../IAnalyticsAdapter.js'; -import type { - AnalyticsEventInput, - AnalyticsQueryResult, -} from '../types.js'; -import type { - CDCChange, - CDCConfig, -} from '../../../storage/dataWarehouse/IDataWarehouseAnalytics.js'; -import type { AnalyticsWriteOptions } from '../types.js'; - -export interface SnowflakeAnalyticsAdapterOptions { - kafka?: Kafka; - kafkaTopic?: string; - batchSize?: number; - batchTimeout?: number; - compression?: boolean; - tracer?: SafeTracer; -} - -export class SnowflakeAnalyticsAdapter implements IAnalyticsAdapter { - readonly name = 'snowflake-analytics'; - - private kafkaProducer?: KafkaProducer; - private loader?: DataLoader; - private readonly batchTimeout: number; - - constructor( - private readonly kysely: Kysely, - private readonly options: SnowflakeAnalyticsAdapterOptions, - ) { - this.batchTimeout = options.batchTimeout ?? 1_000; - - if (options.kafka) { - this.kafkaProducer = options.kafka.producer(); - this.loader = new DataLoader( - async (payloads: readonly any[]) => { - await this.bulkOutboxWrite(payloads as any[]); - return new Array(payloads.length).fill(undefined); - }, - { - cache: false, - batch: true, - maxBatchSize: options.batchSize ?? 200, - batchScheduleFn: (dispatch) => { - setTimeout(dispatch, this.batchTimeout); - }, - }, - ); - } - } - - async writeEvents( - table: string, - events: readonly AnalyticsEventInput[], - options?: AnalyticsWriteOptions, - ): Promise { - if (!this.kafkaProducer) { - throw new Error('Snowflake analytics adapter requires Kafka configuration'); - } - - const payload = events.map((data) => ({ - table, - data, - })); - - if (events.length === 0) { - return; - } - - await this.kafkaProducer.connect(); - - if (options?.batchTimeout === 0 || !this.loader) { - await this.bulkOutboxWrite(payload); - return; - } - - await this.loader.loadMany(payload); - } - - async query( - sqlStatement: string, - params: readonly unknown[] = [], - ): Promise { - const compiled = CompiledQuery.raw(sqlStatement, params as unknown[]); - const result = await this.kysely.executeQuery(compiled); - return result.rows as readonly T[]; - } - - async flush(): Promise { - await this.flushPendingWrites(); - } - - async close(): Promise { - await this.flushPendingWrites(); - if (this.kafkaProducer) { - await this.kafkaProducer.disconnect(); - } - } - - supportsCDC(): boolean { - return true; - } - - async createCDCStream( - config: CDCConfig, - ) { - const { tableName, schemaName = 'PUBLIC' } = config; - await sql`CREATE STREAM IF NOT EXISTS ${sql.raw(`${tableName}_STREAM`)} ON TABLE ${sql.raw(`${schemaName}.${tableName}`)}`.execute(this.kysely); - } - - async consumeCDCChanges( - streamName: string, - callback: (changes: CDCChange[]) => Promise, - tracer?: SafeTracer, - ): Promise { - const runner = async () => { - await this.kysely.transaction().execute(async (trx) => { - const changes = await trx - .selectFrom(streamName as any) - .selectAll() - .execute(); - - if (!changes.length) return; - - const mapped = changes.map((row: any) => { - const action = row.METADATA$ACTION as - | 'INSERT' - | 'UPDATE' - | 'DELETE'; - const rowId = row.METADATA$ROW_ID; - const timestamp = - rowId instanceof Date - ? rowId - : new Date(String(rowId ?? Date.now())); - - return { - operation: action, - before: action === 'DELETE' ? (row as T) : undefined, - after: action !== 'DELETE' ? (row as T) : undefined, - metadata: { - timestamp, - transactionId: - rowId != null ? String(rowId) : undefined, - }, - } satisfies CDCChange; - }); - - await callback(mapped); - - await sql`INSERT INTO PUBLIC.ALL_ORGS (ID) SELECT 'ignored' FROM ${sql.raw(streamName)} WHERE 1=0`.execute( - trx, - ); - }); - }; - - if (tracer) { - await tracer.addActiveSpan( - { resource: 'SnowflakeAnalytics', operation: 'consumeCDCChanges' }, - runner, - ); - return; - } - - await runner(); - } - - private async flushPendingWrites(): Promise { - if (this.loader) { - await sleep(this.batchTimeout + 1_000); - } - } - - private async bulkOutboxWrite(data: readonly any[]): Promise { - if (!this.kafkaProducer) return; - if (!data.length) return; - - const now = new Date(); - const kafkaTopic = this.options.kafkaTopic ?? 'DATA_WAREHOUSE_INGEST_EVENTS'; - - await this.kafkaProducer.send({ - topic: kafkaTopic, - compression: this.options.compression ? CompressionTypes.ZSTD : undefined, - messages: data.map((msg) => ({ - key: this.makeKafkaKey(msg), - value: { - dataJSON: jsonStringifyUnstable(msg.data), - recordedAt: now, - table: msg.table, - }, - })), - }); - } - - private makeKafkaKey(payload: any): any { - if (payload.data?.org_id && payload.data?.item_creator_id) { - return { - orgId: payload.data.org_id, - userId: payload.data.item_creator_id, - }; - } - - return undefined; - } -} diff --git a/server/plugins/analytics/index.ts b/server/plugins/analytics/index.ts index ef40026..a1f2344 100644 --- a/server/plugins/analytics/index.ts +++ b/server/plugins/analytics/index.ts @@ -5,10 +5,6 @@ export type { AnalyticsWriteOptions, } from './types.js'; export { NoOpAnalyticsAdapter } from './examples/NoOpAnalyticsAdapter.js'; -export { - SnowflakeAnalyticsAdapter, - type SnowflakeAnalyticsAdapterOptions, -} from './adapters/SnowflakeAnalyticsAdapter.js'; export { ClickhouseAnalyticsAdapter, type ClickhouseAnalyticsAdapterOptions, diff --git a/server/plugins/utils/README.md b/server/plugins/utils/README.md index 45c5921..f4087a9 100644 --- a/server/plugins/utils/README.md +++ b/server/plugins/utils/README.md @@ -3,4 +3,4 @@ Helper modules that adapters can import to avoid re-implementing common patterns (batching, retry loops, etc.). The directory is intentionally empty right now; future PRs will populate it incrementally as we extract reusable -code from the Snowflake adapters. +code from existing adapters. diff --git a/server/plugins/warehouse/adapters/SnowflakeWarehouseAdapter.ts b/server/plugins/warehouse/adapters/SnowflakeWarehouseAdapter.ts deleted file mode 100644 index 2027e35..0000000 --- a/server/plugins/warehouse/adapters/SnowflakeWarehouseAdapter.ts +++ /dev/null @@ -1,125 +0,0 @@ -import type SafeTracer from '../../../utils/SafeTracer.js'; -import makeSnowflakeConnectionPool from '../../../snowflake/makeConnectionPool.js'; -import type { IWarehouseAdapter } from '../IWarehouseAdapter.js'; -import { - type WarehouseTransactionFn, - type WarehouseQueryFn, - type WarehouseQueryResult, -} from '../types.js'; - -export interface SnowflakeWarehouseConnection { - account: string; - username: string; - password: string; - database: string; - warehouse: string; - schema?: string; - role?: string; - arrayBindingThreshold?: number; -} - -export interface SnowflakeWarehousePoolConfig { - max?: number; - min?: number; - autostart?: boolean; -} - -export interface SnowflakeWarehouseAdapterOptions { - connection: SnowflakeWarehouseConnection; - pool?: SnowflakeWarehousePoolConfig; - tracer?: SafeTracer; -} - -export class SnowflakeWarehouseAdapter implements IWarehouseAdapter { - readonly name = 'snowflake-warehouse'; - - private readonly tracer?: SafeTracer; - private readonly pool: ReturnType; - - constructor(private readonly options: SnowflakeWarehouseAdapterOptions) { - this.tracer = options.tracer; - this.pool = makeSnowflakeConnectionPool( - { - account: options.connection.account, - username: options.connection.username, - password: options.connection.password, - database: options.connection.database, - role: options.connection.role ?? 'ACCOUNTADMIN', - schema: options.connection.schema ?? 'PUBLIC', - warehouse: options.connection.warehouse, - arrayBindingThreshold: - options.connection.arrayBindingThreshold ?? Number.MAX_VALUE, - }, - options.pool, - ); - } - - start(): void { - this.pool.start(); - } - - async query( - sql: string, - params: readonly unknown[] = [], - ): Promise { - const runQuery = async () => { - const connection = await this.pool.acquire(); - try { - const rows = (await connection.execute( - sql, - params as unknown[], - )) as T[]; - return rows as readonly T[]; - } finally { - this.pool.release(connection).catch(() => {}); - } - }; - - if (this.tracer) { - return this.tracer.addActiveSpan( - { resource: 'snowflake.client', operation: 'snowflake.query' }, - runQuery, - ); - } - - return runQuery(); - } - - async transaction(fn: WarehouseTransactionFn): Promise { - const connection = await this.pool.acquire(); - await connection.execute('begin'); - - const query: WarehouseQueryFn = async function < - R = WarehouseQueryResult, - >( - statement: string, - parameters: readonly unknown[] = [], - ): Promise { - const rows = (await connection.execute( - statement, - parameters as unknown[], - )) as R[]; - return rows as readonly R[]; - }; - - try { - const result = await fn(query); - await connection.execute('commit'); - return result; - } catch (error) { - await connection.execute('rollback'); - throw error; - } finally { - this.pool.release(connection).catch(() => {}); - } - } - - async flush(): Promise { - // Snowflake connections do not buffer operations. This is a no-op. - } - - async close(): Promise { - await this.pool.drain(); - await this.pool.clear(); - } -} diff --git a/server/plugins/warehouse/index.ts b/server/plugins/warehouse/index.ts index ddef86c..b25bfb7 100644 --- a/server/plugins/warehouse/index.ts +++ b/server/plugins/warehouse/index.ts @@ -5,12 +5,6 @@ export type { WarehouseTransactionFn, } from './types.js'; export { NoOpWarehouseAdapter } from './examples/NoOpWarehouseAdapter.js'; -export { - SnowflakeWarehouseAdapter, - type SnowflakeWarehouseAdapterOptions, - type SnowflakeWarehouseConnection, - type SnowflakeWarehousePoolConfig, -} from './adapters/SnowflakeWarehouseAdapter.js'; export { ClickhouseWarehouseAdapter, type ClickhouseWarehouseAdapterOptions, diff --git a/server/plugins/warehouse/queries/SnowflakeActionExecutionsAdapter.ts b/server/plugins/warehouse/queries/SnowflakeActionExecutionsAdapter.ts deleted file mode 100644 index ac1196f..0000000 --- a/server/plugins/warehouse/queries/SnowflakeActionExecutionsAdapter.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { type Kysely } from 'kysely'; - -import { - type IActionExecutionsAdapter, - type ItemActionHistoryInput, - type ItemActionHistoryRecord, - type UserStrikeActionRecord, - type UserStrikeActionsInput, -} from './IActionExecutionsAdapter.js'; -import { type SnowflakePublicSchema } from '../../../snowflake/types.js'; -import { sfDateToDate } from '../../../snowflake/types.js'; -import { getUtcDateOnlyString } from '../../../utils/time.js'; -import { RuleEnvironment } from '../../../rule_engine/RuleEngine.js'; - -interface ActionExecutionsRow { - TS: Date; - ITEM_ID: string | null; - ITEM_TYPE_ID: string | null; - ITEM_CREATOR_ID: string | null; - ITEM_CREATOR_TYPE_ID: string | null; - ACTOR_ID: string | null; - JOB_ID: string | null; - POLICIES: Array<{ id: string }> | null; - RULES: Array<{ id: string }> | null; - ACTION_ID: string; - ACTION_SOURCE?: string; -} - -export class SnowflakeActionExecutionsAdapter - implements IActionExecutionsAdapter -{ - constructor( - private readonly kysely: Kysely< - Pick - >, - ) {} - - async getItemActionHistory( - input: ItemActionHistoryInput, - ): Promise> { - const { orgId, itemId, itemTypeId } = input; - - const query = this.kysely - .selectFrom('ACTION_EXECUTIONS') - .select([ - 'TS', - 'ITEM_ID', - 'ITEM_TYPE_ID', - 'ITEM_CREATOR_ID', - 'ITEM_CREATOR_TYPE_ID', - 'ACTOR_ID', - 'JOB_ID', - 'POLICIES', - 'RULES', - 'ACTION_ID', - ]) - .where('ORG_ID', '=', orgId) - .where(({ or, and, eb, fn, val }) => - or([ - and([ - eb(fn('LOWER', ['ITEM_CREATOR_ID']), '=', fn('LOWER', [val(itemId)])), - eb( - fn('LOWER', ['ITEM_CREATOR_TYPE_ID']), - '=', - fn('LOWER', [val(itemTypeId)]), - ), - ]), - and([ - eb(fn('LOWER', ['ITEM_ID']), '=', fn('LOWER', [val(itemId)])), - eb( - fn('LOWER', ['ITEM_TYPE_ID']), - '=', - fn('LOWER', [val(itemTypeId)]), - ), - ]), - ]), - ) - .where(({ or, eb }) => - or([ - eb('RULE_ENVIRONMENT', 'is', null), - eb('RULE_ENVIRONMENT', '!=', RuleEnvironment.BACKGROUND), - ]), - ) - .orderBy('TS', 'desc'); - - const rows = (await query.execute()) as unknown as ActionExecutionsRow[]; - - return rows - .filter((row) => row.ITEM_ID != null && row.ITEM_TYPE_ID != null) - .map((row) => ({ - actionId: row.ACTION_ID, - itemId: row.ITEM_ID!, - itemTypeId: row.ITEM_TYPE_ID!, - actorId: row.ACTOR_ID ?? null, - jobId: row.JOB_ID ?? null, - userId: row.ITEM_CREATOR_ID ?? null, - userTypeId: row.ITEM_CREATOR_TYPE_ID ?? null, - policies: (row.POLICIES ?? []).map((policy) => policy.id), - ruleIds: (row.RULES ?? []).map((rule) => rule.id), - occurredAt: sfDateToDate(row.TS), - })); - } - - async getRecentUserStrikeActions( - input: UserStrikeActionsInput, - ): Promise> { - const { orgId, filterBy, limit } = input; - - const query = this.kysely - .selectFrom('ACTION_EXECUTIONS') - .select([ - 'TS', - 'ITEM_ID', - 'ITEM_TYPE_ID', - 'ACTION_ID', - 'ACTION_SOURCE', - ]) - .where('ORG_ID', '=', orgId) - .where('ACTION_SOURCE', '=', 'user-strike-action-execution') - .$if(filterBy?.startDate != null, (qb) => - qb.where('DS', '>=', getUtcDateOnlyString(filterBy!.startDate)), - ) - .$if(filterBy?.endDate != null, (qb) => - qb.where('DS', '<=', getUtcDateOnlyString(filterBy!.endDate)), - ) - .orderBy('TS', 'desc') - .$if(limit != null, (qb) => qb.limit(limit!)); - - const rows = (await query.execute()) as unknown as ActionExecutionsRow[]; - - return rows - .filter((row) => row.ITEM_ID != null && row.ITEM_TYPE_ID != null) - .map((row) => ({ - actionId: row.ACTION_ID, - itemId: row.ITEM_ID!, - itemTypeId: row.ITEM_TYPE_ID!, - source: row.ACTION_SOURCE ?? 'user-strike-action-execution', - occurredAt: sfDateToDate(row.TS), - })); - } -} - diff --git a/server/plugins/warehouse/queries/SnowflakeActionStatisticsAdapter.ts b/server/plugins/warehouse/queries/SnowflakeActionStatisticsAdapter.ts deleted file mode 100644 index 099cc67..0000000 --- a/server/plugins/warehouse/queries/SnowflakeActionStatisticsAdapter.ts +++ /dev/null @@ -1,461 +0,0 @@ -import _ from 'lodash'; -import { sql, type Kysely } from 'kysely'; - -import { - type ActionCountsInput, - type IActionStatisticsAdapter, -} from './IActionStatisticsAdapter.js'; -import { - sfDateToDateOnlyString, - type FilterableSfDate, -} from '../../../snowflake/types.js'; -import { - getUtcDateOnlyString, - YEAR_MS, -} from '../../../utils/time.js'; - -const { omit } = _; - -type ActionStatisticsServiceSchema = { - 'ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS': { - DS: unknown; - ORG_ID: string; - NUM_SUBMISSIONS: number; - }; - 'ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_POLICY': { - DS: unknown; - ORG_ID: string; - NUM_SUBMISSIONS: number; - POLICY_ID: string; - POLICY_NAME: string; - }; - 'ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_TAG': { - DS: unknown; - ORG_ID: string; - NUM_SUBMISSIONS: number; - TAG: string; - }; - 'ACTION_STATISTICS_SERVICE.BY_RULE': { - ORG_ID: string; - ITEM_ID: string; - ITEM_TYPE_ID: string; - RULE_ID: string; - ACTION_TIME: Date; - }; - 'ACTION_STATISTICS_SERVICE.BY_POLICY': { - ORG_ID: string; - ITEM_ID: string; - ITEM_TYPE_ID: string; - POLICY_ID: string; - ACTION_TIME: Date; - }; - 'ACTION_STATISTICS_SERVICE.BY_ACTION': { - ORG_ID: string; - ITEM_ID: string; - ITEM_TYPE_ID: string; - ACTION_ID: string; - ACTION_TIME: Date; - }; - 'ACTION_STATISTICS_SERVICE.BY_ITEM_TYPE': { - ORG_ID: string; - ITEM_ID: string; - ITEM_TYPE_ID: string; - ACTION_TIME: Date; - }; - 'ACTION_STATISTICS_SERVICE.BY_SOURCE': { - ORG_ID: string; - ITEM_ID: string; - ITEM_TYPE_ID: string; - SOURCE: string; - ACTION_TIME: Date; - }; -}; - -type SnowflakePublicSchema = { - ACTION_EXECUTIONS: { - ORG_ID: string; - ACTION_ID: string; - ACTION_NAME: string; - ACTION_SOURCE: string; - ITEM_TYPE_ID: string; - TS: Date; - DS: string; - }; -}; - -export class SnowflakeActionStatisticsAdapter - implements IActionStatisticsAdapter -{ - constructor( - private readonly kysely: Kysely< - ActionStatisticsServiceSchema & - Pick - >, - ) {} - - async getActionedSubmissionCountsByDay( - orgId: string, - startAt: Date = new Date(Date.now() - YEAR_MS), - ) { - const results = await this.kysely - .selectFrom('ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS') - .select(['DS', 'NUM_SUBMISSIONS']) - .where('DS', '>', getUtcDateOnlyString(startAt)) - .where('ORG_ID', '=', orgId) - .execute(); - - return results.map((result) => ({ - date: sfDateToDateOnlyString(result.DS as FilterableSfDate), - count: result.NUM_SUBMISSIONS, - })); - } - - async getActionedSubmissionCountsByTagByDay( - orgId: string, - startAt: Date = new Date(Date.now() - YEAR_MS), - ) { - const results = await this.kysely - .selectFrom('ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_TAG') - .select(['DS', 'TAG as tag', 'NUM_SUBMISSIONS as count']) - .where('DS', '>', getUtcDateOnlyString(startAt)) - .where('ORG_ID', '=', orgId) - .execute(); - - return results.map((result) => ({ - ...omit(result, 'DS'), - date: sfDateToDateOnlyString(result.DS as FilterableSfDate), - })); - } - - async getActionedSubmissionCountsByPolicyByDay( - orgId: string, - startAt: Date = new Date(Date.now() - YEAR_MS), - ) { - const results = await this.kysely - .selectFrom( - 'ACTION_STATISTICS_SERVICE.ACTIONED_SUBMISSION_COUNTS_BY_POLICY', - ) - .select(['DS', 'POLICY_ID', 'POLICY_NAME', 'NUM_SUBMISSIONS']) - .where('DS', '>', getUtcDateOnlyString(startAt)) - .where('ORG_ID', '=', orgId) - .execute(); - - return results.map((result) => ({ - date: sfDateToDateOnlyString(result.DS as FilterableSfDate), - count: result.NUM_SUBMISSIONS, - policy: { id: result.POLICY_ID, name: result.POLICY_NAME }, - })); - } - - async getActionedSubmissionCountsByActionByDay( - orgId: string, - startAt: Date = new Date(Date.now() - YEAR_MS), - ) { - const results = await this.kysely - .selectFrom('ACTION_EXECUTIONS') - .select([sql`COUNT(*)`.as('count'), 'ACTION_NAME', 'DS']) - .where('DS', '>', getUtcDateOnlyString(startAt)) - .where('ORG_ID', '=', orgId) - .groupBy(['ACTION_NAME', 'DS']) - .orderBy('DS', 'desc') - .execute(); - - return results.map((result) => ({ - date: sfDateToDateOnlyString(result.DS as FilterableSfDate), - count: result.count as number, - action: { name: result.ACTION_NAME }, - })); - } - - async getActionCountsPerDay( - orgId: string, - startAt: Date = new Date(Date.now() - YEAR_MS), - ) { - const results = await this.kysely - .selectFrom('ACTION_EXECUTIONS') - .select([sql`COUNT(*)`.as('count'), 'DS']) - .where('DS', '>', getUtcDateOnlyString(startAt)) - .where('ORG_ID', '=', orgId) - .groupBy(['DS']) - .orderBy('DS', 'desc') - .execute(); - - return results.map((result) => ({ - date: sfDateToDateOnlyString(result.DS as FilterableSfDate), - count: result.count as number, - })); - } - - async getPoliciesSortedByViolationCount(input: { - filterBy: { startDate: Date; endDate: Date }; - timeZone: string; - orgId: string; - }) { - const { orgId, filterBy, timeZone } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_POLICY`) - .select([sql`COUNT(*)`.as('count')]) - .select(['POLICY_ID']) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['POLICY_ID']) - .orderBy('count', 'desc') - .execute(); - - return results.map((result) => ({ - count: result.count, - policy_id: result.POLICY_ID, - })); - } - - async getAllActionCountsGroupByPolicy(input: ActionCountsInput) { - const { orgId, filterBy, timeZone, timeDivision } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_POLICY`) - .select([sql`COUNT(*)`.as('count')]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, action_time))`.as( - 'time', - ), - 'POLICY_ID', - ]) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['POLICY_ID', 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - policy_id: result.POLICY_ID, - time: result.time, - })); - } - - async getAllActionCountsGroupByActionId(input: ActionCountsInput) { - const { orgId, filterBy, timeZone, timeDivision } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_ACTION`) - .select([sql`COUNT(*)`.as('count')]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, action_time))`.as( - 'time', - ), - 'ACTION_ID', - ]) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['ACTION_ID', 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - action_id: result.ACTION_ID, - time: result.time, - })); - } - - async getAllActionCountsGroupBySource(input: ActionCountsInput) { - const { orgId, filterBy, timeZone, timeDivision } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_SOURCE`) - .select([sql`COUNT(*)`.as('count')]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, action_time))`.as( - 'time', - ), - ]) - .select((qb) => - qb - .case() - .when('SOURCE', 'in', ['post-items', 'post-content']) - .then('automated-rule') - .else(qb.ref('SOURCE')) - .end() - .as('SOURCE'), - ) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['SOURCE', 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - source: result.SOURCE, - time: result.time, - })); - } - - async getAllActionCountsGroupByItemTypeId(input: ActionCountsInput) { - const { orgId, filterBy, timeZone, timeDivision } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_ITEM_TYPE`) - .select([sql`COUNT(*)`.as('count')]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, action_time))`.as( - 'time', - ), - 'ITEM_TYPE_ID', - ]) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['ITEM_TYPE_ID', 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - item_type_id: result.ITEM_TYPE_ID, - time: result.time, - })); - } - - async getAllActionCountsGroupByRule(input: ActionCountsInput) { - const { orgId, filterBy, timeZone, timeDivision } = input; - - const results = await this.kysely - .selectFrom(`ACTION_STATISTICS_SERVICE.BY_RULE`) - .select([sql`COUNT(*)`.as('count')]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, action_time))`.as( - 'time', - ), - 'RULE_ID', - ]) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, ACTION_TIME)`, - '<=', - filterBy.endDate, - ) - .groupBy(['RULE_ID', 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - rule_id: result.RULE_ID, - time: result.time, - })); - } - - async getAllActionCountsGroupBy(input: ActionCountsInput) { - const { orgId, groupBy, filterBy, timeDivision, timeZone } = input; - - if (groupBy === 'POLICY_ID') { - throw new Error('Cannot group by policy id on this table'); - } - if (groupBy === 'RULE_ID') { - throw new Error('Cannot group by policy id on this table'); - } - - const results = await this.kysely - .selectFrom(`ACTION_EXECUTIONS`) - .select([sql`COUNT(*)`.as('count'), groupBy]) - .select([ - sql`DATE_TRUNC(${timeDivision}, CONVERT_TIMEZONE(${timeZone}, TS))`.as( - 'time', - ), - ]) - .$if(groupBy.includes('ACTION_SOURCE'), (qb) => - qb.select((qb) => - qb - .case() - .when('ACTION_SOURCE', 'in', ['post-items', 'post-content']) - .then('automated-rule') - .else(qb.ref('ACTION_SOURCE')) - .end() - .as('source'), - ), - ) - .where('ORG_ID', '=', orgId) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, TS)`, - '>=', - filterBy.startDate, - ) - .where( - sql`CONVERT_TIMEZONE(${timeZone}, TS)`, - '<=', - filterBy.endDate, - ) - .$if(filterBy.actionIds.length > 0, (qb) => - qb.where('ACTION_ID', 'in', filterBy.actionIds), - ) - .$if(filterBy.itemTypeIds.length > 0, (qb) => - qb.where('ITEM_TYPE_ID', 'in', filterBy.itemTypeIds), - ) - .$if(filterBy.sources.length > 0, (qb) => - qb.where( - 'ACTION_SOURCE', - 'in', - filterBy.sources.flatMap((it) => - it === 'automated-rule' ? ['post-items', 'post-content'] : it, - ), - ), - ) - .groupBy([groupBy, 'time']) - .execute(); - - return results.map((result) => ({ - count: result.count, - action_id: result.ACTION_ID, - source: result.source, - item_type_id: result.ITEM_TYPE_ID, - time: result.time, - })); - } -} - diff --git a/server/plugins/warehouse/queries/SnowflakeContentApiRequestsAdapter.ts b/server/plugins/warehouse/queries/SnowflakeContentApiRequestsAdapter.ts deleted file mode 100644 index 7fc50b1..0000000 --- a/server/plugins/warehouse/queries/SnowflakeContentApiRequestsAdapter.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { sql, type Kysely } from 'kysely'; -import type { ItemIdentifier } from '@roostorg/types'; - -import { - type ContentApiRequestRecord, - type ContentApiRequestCountRecord, - type ContentApiImageCountRecord, - type ContentApiRequestQueryOptions, - type IContentApiRequestsAdapter, -} from './IContentApiRequestsAdapter.js'; -import { type SnowflakePublicSchema } from '../../../snowflake/types.js'; -import { sfDateToDate, sfDateToDateOnlyString } from '../../../snowflake/types.js'; -import { getUtcDateOnlyString } from '../../../utils/time.js'; - -interface ContentApiRow { - ITEM_DATA: unknown; - SUBMISSION_ID: string; - TS: Date; - ITEM_CREATOR_ID: string | null; - ITEM_CREATOR_TYPE_ID: string | null; - ITEM_TYPE_VERSION: string; - ITEM_TYPE_SCHEMA_VARIANT: string; -} - -export class SnowflakeContentApiRequestsAdapter - implements IContentApiRequestsAdapter -{ - constructor( - private readonly kysely: Kysely< - Pick - >, - ) {} - - async getSuccessfulRequestsForItem( - orgId: string, - item: ItemIdentifier, - options?: ContentApiRequestQueryOptions, - ): Promise> { - const { latestOnly = false, lookbackWindowMs = 6 * 30 * 24 * 60 * 60 * 1000 } = - options ?? {}; - - const query = this.kysely - .selectFrom('CONTENT_API_REQUESTS') - .select([ - 'ITEM_DATA', - 'SUBMISSION_ID', - 'TS', - 'ITEM_CREATOR_ID', - 'ITEM_CREATOR_TYPE_ID', - 'ITEM_TYPE_VERSION', - 'ITEM_TYPE_SCHEMA_VARIANT', - ]) - .where('EVENT', '=', 'REQUEST_SUCCEEDED') - .where('ORG_ID', '=', orgId) - .where('ITEM_ID', '=', item.id) - .where('ITEM_TYPE_ID', '=', item.typeId) - .where( - 'DS', - '>=', - getUtcDateOnlyString( - new Date(Date.now() - Math.max(1, lookbackWindowMs)), - ), - ) - .orderBy('TS', 'desc') - .$if(latestOnly, (qb) => qb.limit(1)); - - const rows = (await query.execute()) as unknown as ContentApiRow[]; - - return rows.map((row) => ({ - submissionId: row.SUBMISSION_ID, - itemData: row.ITEM_DATA, - itemTypeVersion: row.ITEM_TYPE_VERSION, - itemTypeSchemaVariant: row.ITEM_TYPE_SCHEMA_VARIANT, - itemCreatorId: row.ITEM_CREATOR_ID, - itemCreatorTypeId: row.ITEM_CREATOR_TYPE_ID, - occurredAt: sfDateToDate(row.TS), - })); - } - - async getSuccessfulRequestCountsByDay( - orgId: string, - start: Date, - end: Date, - ): Promise> { - const results = await this.kysely - .selectFrom('CONTENT_API_REQUESTS') - .select([sql`COUNT(*)`.as('count'), 'DS']) - .where('ORG_ID', '=', orgId) - .where('EVENT', '=', 'REQUEST_SUCCEEDED') - .where('DS', '>=', getUtcDateOnlyString(start)) - .where('DS', '<', getUtcDateOnlyString(end)) - .groupBy('DS') - .execute(); - - return results.map((row) => ({ - date: sfDateToDateOnlyString(row.DS), - count: Number(row.count), - })); - } - - async getImageRequestCountsByDay( - orgId: string, - start: Date, - end: Date, - ): Promise> { - const query = sql<{ - DS: Date; - COUNT: number; - }>`SELECT ds, count(*) as count -FROM CONTENT_API_REQUESTS, - LATERAL FLATTEN(input => parse_json(item_type_schema)) as f -WHERE org_id = ${orgId} - AND f.value:type::STRING = 'IMAGE' - AND json_extract_path_text(item_data, CONCAT('"', f.value:name::STRING, '"')) IS NOT NULL - AND ds >= ${getUtcDateOnlyString(start)} - AND ds < ${getUtcDateOnlyString(end)} -GROUP BY ds -ORDER BY ds ASC`; - - const results = await query.execute(this.kysely); - - return results.rows.map((row) => ({ - date: sfDateToDateOnlyString(row.DS), - count: Number(row.COUNT), - })); - } -} - diff --git a/server/plugins/warehouse/queries/SnowflakeOrgCreationAdapter.ts b/server/plugins/warehouse/queries/SnowflakeOrgCreationAdapter.ts deleted file mode 100644 index b4a5577..0000000 --- a/server/plugins/warehouse/queries/SnowflakeOrgCreationAdapter.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type IOrgCreationAdapter } from './IOrgCreationAdapter.js'; -import type { IDataWarehouse } from '../../../storage/dataWarehouse/IDataWarehouse.js'; -import type SafeTracer from '../../../utils/SafeTracer.js'; - -export class SnowflakeOrgCreationAdapter implements IOrgCreationAdapter { - constructor( - private readonly dataWarehouse: IDataWarehouse, - private readonly tracer: SafeTracer, - ) {} - - async logOrgCreated( - id: string, - name: string, - email: string, - websiteUrl: string, - dateCreated: string, - ): Promise { - await this.dataWarehouse.query( - `INSERT INTO ALL_ORGS (id, name, email, website_url, date_created) VALUES (:1, :2, :3, :4, :5)`, - this.tracer, - [id, name, email, websiteUrl, dateCreated], - ); - } -} - diff --git a/server/plugins/warehouse/queries/SnowflakeReportingAnalyticsAdapter.ts b/server/plugins/warehouse/queries/SnowflakeReportingAnalyticsAdapter.ts deleted file mode 100644 index c2b475e..0000000 --- a/server/plugins/warehouse/queries/SnowflakeReportingAnalyticsAdapter.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { sql, type Kysely } from 'kysely'; - -import { - type IReportingAnalyticsAdapter, - type ReportingRulePassRateInput, - type ReportingRulePassRateRow, - type ReportingRulePassingContentSample, - type ReportingRulePassingContentSampleInput, - type ReportsByDayRow, -} from './IReportingAnalyticsAdapter.js'; -import { - sfDateToDate, - sfDateToDateOnlyString, - type SfDate, -} from '../../../snowflake/types.js'; -import { getUtcDateOnlyString } from '../../../utils/time.js'; -import { type ReportingServiceSnowflakeSchema } from '../../../services/reportingService/index.js'; - -export class SnowflakeReportingAnalyticsAdapter - implements IReportingAnalyticsAdapter -{ - constructor( - private readonly kysely: Kysely, - ) {} - - async getTotalIngestedReportsByDay( - orgId: string, - ): Promise> { - const results = await this.kysely - .selectFrom('REPORTING_SERVICE.REPORTS') - .select([ - sql`DATE(REPORTED_AT)`.as('date'), - sql`COUNT(*)`.as('count'), - ]) - .where('ORG_ID', '=', orgId) - .groupBy(sql`DATE(REPORTED_AT)`) - .execute(); - - return results.map((result) => ({ - ...result, - date: sfDateToDateOnlyString(result.date), - })); - } - - async getReportingRulePassRateData( - input: ReportingRulePassRateInput, - ): Promise> { - const { orgId, ruleId, startDate } = input; - - const results = await this.kysely - .selectFrom('REPORTING_SERVICE.REPORTING_RULE_EXECUTION_STATISTICS') - .select((eb) => [ - eb.fn.sum('NUM_PASSES').as('totalMatches'), - eb.fn.sum('NUM_RUNS').as('totalRequests'), - eb.fn('date', ['TS_START_INCLUSIVE']).as('date'), - ]) - .where('ORG_ID', '=', orgId) - .where('RULE_ID', '=', ruleId) - .where(({ fn, eb }) => - eb( - fn('date', ['TS_START_INCLUSIVE']), - '>', - getUtcDateOnlyString(startDate), - ), - ) - .groupBy('date') - .execute(); - - return results.map((result) => ({ - totalMatches: result.totalMatches, - totalRequests: result.totalRequests, - date: (result.date as Date).toJSON(), - })); - } - - async getReportingRulePassingContentSamples( - input: ReportingRulePassingContentSampleInput, - ): Promise> { - const { orgId, ruleId, itemIds, numSamples, filter } = input; - - const baseQuery = this.kysely - .selectFrom('REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS') - .select((eb) => [ - eb.ref('DS').as('date'), - eb.ref('TS').as('ts'), - eb.ref('ITEM_ID').as('itemId'), - eb.ref('ITEM_TYPE_NAME').as('itemTypeName'), - eb.ref('ITEM_TYPE_ID').as('itemTypeId'), - eb.ref('ITEM_CREATOR_ID').as('creatorId'), - eb.ref('ITEM_CREATOR_TYPE_ID').as('creatorTypeId'), - eb.ref('ITEM_DATA').as('itemData'), - eb.ref('RESULT').as('result'), - eb.ref('RULE_ENVIRONMENT').as('environment'), - eb.ref('RULE_ID').as('ruleId'), - eb.ref('RULE_NAME').as('ruleName'), - eb.ref('PASSED').as('passed'), - eb.ref('POLICY_IDS').as('policyIds'), - ]) - .where('RULE_ID', '=', ruleId) - .where('ORG_ID', '=', orgId) - .where('PASSED', '=', true) - .where('ITEM_DATA', 'is not', null) - .$if(itemIds != null && itemIds.length > 0, (qb) => - qb.where('ITEM_ID', 'in', itemIds!), - ) - .limit(numSamples); - - const finalQuery = - filter.type === 'latestVersion' - ? baseQuery - .where('RULE_VERSION', '>=', filter.minVersion.substring(0, 23)) - .where('DS', '>=', getUtcDateOnlyString(filter.minDate)) - .orderBy('TS', 'desc') - : baseQuery - .where('RULE_VERSION', '>=', filter.fromVersion) - .where('RULE_VERSION', '<', filter.toVersion) - .where('DS', '>=', getUtcDateOnlyString(filter.fromDate)) - .where('DS', '<=', getUtcDateOnlyString(filter.toDate)); - - const rows = await finalQuery.execute(); - - return rows.map((row) => ({ - date: sfDateToDate(row.date), - ts: sfDateToDate(row.ts), - itemId: row.itemId, - itemTypeName: row.itemTypeName, - itemTypeId: row.itemTypeId, - creatorId: row.creatorId, - creatorTypeId: row.creatorTypeId, - itemData: row.itemData, - result: row.result, - environment: row.environment, - ruleId: row.ruleId, - ruleName: row.ruleName, - passed: Boolean(row.passed), - policyIds: row.policyIds, - })); - } - - async getNumTimesReported( - orgId: string, - itemId: string, - ): Promise { - const result = await this.kysely - .selectFrom('REPORTING_SERVICE.REPORTS') - .select([sql`COUNT(*)`.as('count')]) - .where('ORG_ID', '=', orgId) - .where('REPORTED_ITEM_ID', '=', itemId) - .executeTakeFirst(); - - return result?.count ?? null; - } -} - diff --git a/server/plugins/warehouse/queries/index.ts b/server/plugins/warehouse/queries/index.ts index 52489d1..f951ff0 100644 --- a/server/plugins/warehouse/queries/index.ts +++ b/server/plugins/warehouse/queries/index.ts @@ -1,30 +1,15 @@ -export { - SnowflakeActionStatisticsAdapter, -} from './SnowflakeActionStatisticsAdapter.js'; export { ClickhouseActionStatisticsAdapter, } from './ClickhouseActionStatisticsAdapter.js'; -export { - SnowflakeReportingAnalyticsAdapter, -} from './SnowflakeReportingAnalyticsAdapter.js'; export { ClickhouseReportingAnalyticsAdapter, } from './ClickhouseReportingAnalyticsAdapter.js'; -export { - SnowflakeActionExecutionsAdapter, -} from './SnowflakeActionExecutionsAdapter.js'; export { ClickhouseActionExecutionsAdapter, } from './ClickhouseActionExecutionsAdapter.js'; -export { - SnowflakeContentApiRequestsAdapter, -} from './SnowflakeContentApiRequestsAdapter.js'; export { ClickhouseContentApiRequestsAdapter, } from './ClickhouseContentApiRequestsAdapter.js'; -export { - SnowflakeOrgCreationAdapter, -} from './SnowflakeOrgCreationAdapter.js'; export { ClickhouseOrgCreationAdapter, } from './ClickhouseOrgCreationAdapter.js'; diff --git a/server/routes/content/submitContent.ts b/server/routes/content/submitContent.ts index 7cd3032..88611bd 100644 --- a/server/routes/content/submitContent.ts +++ b/server/routes/content/submitContent.ts @@ -130,7 +130,7 @@ Dependencies): RequestHandlerWithBodies< const shouldReturnImmediately = 'contentId' in req.body && !Boolean(req.body.sync); - const skipSnowflakeEventualWriteBatch = + const skipWarehouseEventualWriteBatch = 'contentId' in req.body && Boolean(req.body.sync); const { body } = req; @@ -181,7 +181,7 @@ Dependencies): RequestHandlerWithBodies< .map((it) => (it instanceof Error ? it.message : '')) .join('\n')}`, }, - skipSnowflakeEventualWriteBatch, + skipWarehouseEventualWriteBatch, ); return next(itemSubmissionOrError.error); @@ -198,7 +198,7 @@ Dependencies): RequestHandlerWithBodies< const results = await RuleEngine.runEnabledRules( itemSubmissionOrError.itemSubmission, requestId, - skipSnowflakeEventualWriteBatch, + skipWarehouseEventualWriteBatch, ); await ContentApiLogger.logContentApiRequest( @@ -208,7 +208,7 @@ Dependencies): RequestHandlerWithBodies< itemSubmission: itemSubmissionOrError.itemSubmission, failureReason: undefined, }, - skipSnowflakeEventualWriteBatch, + skipWarehouseEventualWriteBatch, ); // Load the requested derived fields @@ -295,7 +295,7 @@ Dependencies): RequestHandlerWithBodies< safeGet(e, ['message']), )}`, }, - skipSnowflakeEventualWriteBatch, + skipWarehouseEventualWriteBatch, ); return next( diff --git a/server/routes/reporting/submitAppeal.ts b/server/routes/reporting/submitAppeal.ts index 1235d65..c1d6f58 100644 --- a/server/routes/reporting/submitAppeal.ts +++ b/server/routes/reporting/submitAppeal.ts @@ -75,7 +75,7 @@ export default function submitAppeal({ ); // Now that we've at least loaded the item type, we'll log successes and - // failures to snowflake from now on. This is the basic info we'll log. + // failures to the data warehouse from now on. This is the basic info we'll log. const appealReason = req.body.appealReason; const appealerIdentifier = { id: req.body.appealedBy.id, @@ -227,7 +227,7 @@ export default function submitAppeal({ await ReportingService.submitAppeal(appeal); // send response as soon as - // the report has successfully been written to snowflake + // the appeal has successfully been written to the data warehouse res.sendStatus(204); // Enqueue the Job to the BullMQ MRT job queue diff --git a/server/routes/reporting/submitReport.ts b/server/routes/reporting/submitReport.ts index 0491bde..6f57ce1 100644 --- a/server/routes/reporting/submitReport.ts +++ b/server/routes/reporting/submitReport.ts @@ -81,7 +81,7 @@ export default function submitReport({ ); // Now that we've at least loaded the item type, we'll log successes and - // failures to snowflake from now on. This is the basic info we'll log. + // failures to the data warehouse from now on. This is the basic info we'll log. const reportedForReason = req.body.reportedForReason; const reporterIdentifier = req.body.reporter.kind === 'user' @@ -313,7 +313,7 @@ export default function submitReport({ await ReportingService.submitReport(report); // send response as soon as - // the report has successfully been written to snowflake + // the report has successfully been written to the data warehouse res.status(201).json({ reportId }).end(); if (!req.body.reportedForReason?.csam) { diff --git a/server/rule_engine/RuleEvaluator.ts b/server/rule_engine/RuleEvaluator.ts index 5435037..91d14e9 100644 --- a/server/rule_engine/RuleEvaluator.ts +++ b/server/rule_engine/RuleEvaluator.ts @@ -150,7 +150,7 @@ class RuleEvaluator { * * Note that this function _does not_ perform any of the side effects that * usually attend a rule execution, including (even) logging that execution to - * Snowflake. For that reason, this function is private, and should only be + * the data warehouse. For that reason, this function is private, and should only be * called as an implementation detail of the RuleEngine. * * @param ruleConditions - The conditions that logically define the rule diff --git a/server/services/analyticsLoggers/ActionExecutionLogger.ts b/server/services/analyticsLoggers/ActionExecutionLogger.ts index 5eca8b1..f6f7bcf 100644 --- a/server/services/analyticsLoggers/ActionExecutionLogger.ts +++ b/server/services/analyticsLoggers/ActionExecutionLogger.ts @@ -16,7 +16,7 @@ import { getUtcDateOnlyString } from '../../utils/time.js'; import { type ActionExecutionMatchingRule, type ActionExecutionPolicy, -} from '../../snowflake/types.js'; +} from '../../storage/dataWarehouse/warehouseSchema.js'; export type ActionExecutionSourceType = | 'post-content' @@ -59,7 +59,7 @@ class ActionExecutionLogger { executions.map((data) => { // Remove excess properties from the matching rules and policies. We // need to do this, or all kinds of junk (including json null - // values that cause perf problems) can end up in our snowflake table. + // values that cause perf problems) can end up in our warehouse table. const matchingRules = data.matchingRules?.map((rule) => ({ ...safePick(rule, ['id', 'name', 'version', 'tags']), policies: rule.policies.map((it) => diff --git a/server/services/analyticsLoggers/ContentApiLogger.ts b/server/services/analyticsLoggers/ContentApiLogger.ts index 305678c..b797263 100644 --- a/server/services/analyticsLoggers/ContentApiLogger.ts +++ b/server/services/analyticsLoggers/ContentApiLogger.ts @@ -11,7 +11,7 @@ import { getUtcDateOnlyString } from '../../utils/time.js'; import { type RuleExecutionCorrelationId } from './ruleExecutionLoggingUtils.js'; // NB: when an incoming POST /content api request fails, the content submission -// logged to snowflake might not be in a valid, processable shape (in fact, it +// logged to the data warehouse might not be in a valid, processable shape (in fact, it // may be that the content api request failed _because_ the content submission // was invalid). export type ContentApiRequestLogEntry = { diff --git a/server/services/analyticsLoggers/ItemModelScoreLogger.ts b/server/services/analyticsLoggers/ItemModelScoreLogger.ts index ffa140f..3ee8feb 100644 --- a/server/services/analyticsLoggers/ItemModelScoreLogger.ts +++ b/server/services/analyticsLoggers/ItemModelScoreLogger.ts @@ -9,7 +9,7 @@ import { jsonStringifyUnstable } from '../../utils/encoding.js'; import { getUtcDateOnlyString } from '../../utils/time.js'; // NB: when an incoming POST /items/scores api request fails, the content submission -// logged to snowflake might not be in a valid, processable shape (in fact, it +// logged to the data warehouse might not be in a valid, processable shape (in fact, it // may be that the content api request failed _because_ the content submission // was invalid). export type ItemModelScoreLogEntry = { diff --git a/server/services/analyticsLoggers/ruleExecutionLoggingUtils.ts b/server/services/analyticsLoggers/ruleExecutionLoggingUtils.ts index 4e834bc..f7021aa 100644 --- a/server/services/analyticsLoggers/ruleExecutionLoggingUtils.ts +++ b/server/services/analyticsLoggers/ruleExecutionLoggingUtils.ts @@ -29,7 +29,7 @@ type ConditionResultAsLogged = ReplaceDeep< /** * A type for the subset of ConditionSetWithResults that we actually persist to - * Snowflake when recording a rule execution. This doesn't have signal instances, + * the data warehouse when recording a rule execution. This doesn't have signal instances, * etc. and it's all we can actually show to the user in the insights UI. */ export type ConditionSetWithResultAsLogged = Omit< @@ -86,41 +86,6 @@ export type LeafConditionWithResultAsLogged = { */ signal: | { - // NB: billions of legacy leaf conditions in Snowflake have this `id` - // logged as just the SignalType | null, so callers should be prepared - // for this when handling signal results from Aug 2022 through July 2023. - // - // We attempted to migrate those conditions (see - // https://github.com/roostorg/coop/pull/1386) so that we - // could simplify the code here, but the migrations kept timing out (in - // some mix of CodePipeline and Snowflake, thanks to its UDF runtime - // limit), so we ultimately gave up, and only migrated records from - // before Aug 2022. You can verify that legacy conditions still exist by - // running the following query, which uses 2023-04-01 as an arbitrary - // date to search: - // - // WITH RECURSIVE condition_tree AS ( - // SELECT - // r.rule_id, - // r.DS, - // t.value as condition_or_set - // FROM rule_executions r, - // LATERAL FLATTEN(INPUT => parse_json(result):conditions) t - // WHERE DS = '2023-04-01' - // UNION ALL - // SELECT - // condition_tree.rule_id, - // condition_tree.DS, - // t2.value - // FROM condition_tree, - // LATERAL FLATTEN(INPUT => condition_or_set:conditions) t2 - // WHERE DS = '2023-04-01' - // ) - // SELECT * from condition_tree - // WHERE condition_or_set:conditions is null - // AND condition_or_set:signal:id NOT LIKE '{"%' - // AND DS = '2023-04-01' - // // Given that, you'd expect `id` to be typed as // `JsonOf | SignalType | null`, but, instead, we use // `JsonOf<{ type: string; id?: string }> | string | null` for the same diff --git a/server/services/analyticsQueries/ItemHistoryQueries.test.ts b/server/services/analyticsQueries/ItemHistoryQueries.test.ts index 41e9624..4f6e3d4 100644 --- a/server/services/analyticsQueries/ItemHistoryQueries.test.ts +++ b/server/services/analyticsQueries/ItemHistoryQueries.test.ts @@ -2,18 +2,18 @@ import { Kysely, type DatabaseConnection } from 'kysely'; import { safePick } from '../../utils/misc.js'; import { getUtcDateOnlyString, WEEK_MS } from '../../utils/time.js'; -import { makeMockSnowflakeDialect } from '../../snowflake/KyselyDialect.mock.js'; -import { type SnowflakePublicSchema } from '../../snowflake/types.js'; +import { type DataWarehousePublicSchema } from '../../storage/dataWarehouse/warehouseSchema.js'; +import { makeMockWarehouseDialect } from '../../test/stubs/makeMockWarehouseKyselyDialect.js'; import ItemHistoryQueries from './ItemHistoryQueries.js'; -describe('handleSnowflakeTableChanges', () => { +describe('ItemHistoryQueries', () => { test('should issue a proper query', async () => { // Arrange - const snowflakeMock = jest.fn( + const warehouseMock = jest.fn( async (_it) => ({ rows: [] }), ); - const dialect = makeMockSnowflakeDialect(snowflakeMock); - const kysely = new Kysely({ dialect }); + const dialect = makeMockWarehouseDialect(warehouseMock); + const kysely = new Kysely({ dialect }); const dialectMock = { getKyselyInstance: () => kysely, destroy: jest.fn(), @@ -28,7 +28,7 @@ describe('handleSnowflakeTableChanges', () => { }); // Assert - const queriesRan = snowflakeMock.mock.calls.map((it) => + const queriesRan = warehouseMock.mock.calls.map((it) => safePick(it[0], ['parameters', 'sql']), ); expect(queriesRan).toMatchInlineSnapshot(` diff --git a/server/services/analyticsQueries/ItemHistoryQueries.ts b/server/services/analyticsQueries/ItemHistoryQueries.ts index 02bafac..6b639ef 100644 --- a/server/services/analyticsQueries/ItemHistoryQueries.ts +++ b/server/services/analyticsQueries/ItemHistoryQueries.ts @@ -5,9 +5,9 @@ import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js'; import { jsonParse } from '../../utils/encoding.js'; import { getUtcDateOnlyString, WEEK_MS } from '../../utils/time.js'; import { - sfDateToDate, - sfDateToDateOnlyString, -} from '../../snowflake/types.js'; + warehouseDateToDate, + warehouseDateToDateOnlyString, +} from '../../storage/dataWarehouse/warehouseSchema.js'; type ItemHistoryQueryFilter = { passed?: boolean; @@ -89,8 +89,8 @@ class ItemHistoryQueries { ruleName: it.ruleName, policies: it.policies, tags: it.tags, - date: sfDateToDateOnlyString(it.ds), - ts: sfDateToDate(it.ts), + date: warehouseDateToDateOnlyString(it.ds), + ts: warehouseDateToDate(it.ts), contentId: itemId, })); } catch (error) { diff --git a/server/services/analyticsQueries/RuleActionInsights.ts b/server/services/analyticsQueries/RuleActionInsights.ts index a4c2622..5d7db4a 100644 --- a/server/services/analyticsQueries/RuleActionInsights.ts +++ b/server/services/analyticsQueries/RuleActionInsights.ts @@ -23,12 +23,12 @@ import { import { getUtcDateOnlyString, YEAR_MS } from '../../utils/time.js'; import { type ConditionSetWithResultAsLogged } from '../analyticsLoggers/ruleExecutionLoggingUtils.js'; import { - sfDateToDate, - sfDateToDateOnlyString, + warehouseDateToDate, + warehouseDateToDateOnlyString, type RuleExecutionsRow, - type SfDate, - type SnowflakePublicSchema, -} from '../../snowflake/types.js'; + type WarehouseDate, + type DataWarehousePublicSchema, +} from '../../storage/dataWarehouse/warehouseSchema.js'; type RulePassSample = { date: Date; @@ -81,7 +81,7 @@ class RuleActionInsights { private readonly contentApiRequestsAdapter: Dependencies['ContentApiRequestsAdapter'], ) {} - private get kyselySnowflake(): Kysely { + private get kyselyWarehouse(): Kysely { return this.dialect.getKyselyInstance(); } @@ -132,12 +132,12 @@ class RuleActionInsights { // NB: action + submission counts here may cross rule versions, // but I think that's what we want? - const results = await this.kyselySnowflake + const results = await this.kyselyWarehouse .selectFrom('RULE_EXECUTION_STATISTICS') .select((eb) => [ eb.fn.sum('NUM_PASSES').as('totalMatches'), eb.fn.sum('NUM_RUNS').as('totalRequests'), - eb.fn('date', ['TS_START_INCLUSIVE']).as('date'), + eb.fn('date', ['TS_START_INCLUSIVE']).as('date'), ]) .where('ORG_ID', '=', orgId) .where('RULE_ID', '=', ruleId) @@ -153,10 +153,11 @@ class RuleActionInsights { return results.map((result) => ({ ...result, - // NB: this cast is likely not correct, as I believe result.date is an - // SfDate, which means this toJSON method returns a non-standard string - // result, as SfDate overrides Date.prototype.toJSON(). However, we can't - // change this now without risking a backwards compatibility break. + // NB: this cast is likely not correct, as I believe result.date is a + // WarehouseDate, which means this toJSON method returns a non-standard + // string result, as WarehouseDate overrides Date.prototype.toJSON(). + // However, we can't change this now without risking a backwards + // compatibility break. date: (result.date as Date).toJSON(), })); } @@ -206,7 +207,7 @@ class RuleActionInsights { // of the rule's behavior. The only way to do that is to use the rule history // service. Note that, even if we wanted to just use the rule's latest // version, we'd have to use the history service (rather than reading the - // latest version from snowflake), b/c Snowflake is only eventually + // latest version from the data warehouse), b/c the warehouse is only eventually // consistent (i.e., after a rule update, it won't see the new version for // up to 5 minutes, so we'll show cleary outdated samples.) const history = await this.getRuleHistory(['conditionSet'], [ruleId]); @@ -234,7 +235,7 @@ class RuleActionInsights { // Selects executions for this rule, verifying that this is the right org. // We'll filter by rule version below. - const baseQuery = this.kyselySnowflake + const baseQuery = this.kyselyWarehouse .selectFrom('RULE_EXECUTIONS') .select([ 'DS as date', @@ -276,7 +277,7 @@ class RuleActionInsights { .where('RULE_VERSION', '>=', mostRecentVersion) // Find the date associated w/ the earliest relevant version (with a // maximum of 30 days), as passing that w/ the query will help - // snowflake prune a lot. + // the warehouse prune a lot. .where('DS', '>=', getUtcDateOnlyString(dateFilter)) .orderBy('TS', 'desc') ); @@ -298,8 +299,8 @@ class RuleActionInsights { return (await finalQuery.$narrowType().execute()).map((it) => ({ ...it, - date: sfDateToDate(it.date), - ts: sfDateToDate(it.ts), + date: warehouseDateToDate(it.date), + ts: warehouseDateToDate(it.ts), result: it.result != null ? jsonParse(it.result) : undefined, })); } @@ -441,7 +442,7 @@ class RuleActionInsights { } const startDateString = getUtcDateOnlyString(startAt); - const results = await this.kyselySnowflake + const results = await this.kyselyWarehouse .selectFrom('CONTENT_API_REQUESTS') .select([sql`COUNT(*)`.as('count'), 'DS']) .where('DS', '>', startDateString) @@ -451,7 +452,7 @@ class RuleActionInsights { .execute(); return results.map((result) => ({ - date: sfDateToDateOnlyString(result.DS), + date: warehouseDateToDateOnlyString(result.DS), count: result.count, })); } diff --git a/server/services/analyticsQueries/UserHistoryQueries.ts b/server/services/analyticsQueries/UserHistoryQueries.ts index 069bd3c..55e43c0 100644 --- a/server/services/analyticsQueries/UserHistoryQueries.ts +++ b/server/services/analyticsQueries/UserHistoryQueries.ts @@ -1,17 +1,15 @@ import { type ItemIdentifier } from '@roostorg/types'; import { sql, type Kysely } from 'kysely'; -import _ from 'lodash'; import { inject, type Dependencies } from '../../iocContainer/index.js'; import { getUtcDateOnlyString, WEEK_MS } from '../../utils/time.js'; import { - sfDateToDate, - sfDateToDateOnlyString, - type SnowflakePublicSchema, -} from '../../snowflake/types.js'; + warehouseDateToDate, + warehouseDateToDateOnlyString, + type DataWarehousePublicSchema, +} from '../../storage/dataWarehouse/warehouseSchema.js'; -/** ClickHouse uses lowercase column names; Snowflake uses uppercase. */ -const CLICKHOUSE_RULE_EXECUTIONS_COLUMNS = [ +const RULE_EXECUTIONS_COLUMNS = [ 'ds', 'ts', 'item_type_name', @@ -27,64 +25,22 @@ const CLICKHOUSE_RULE_EXECUTIONS_COLUMNS = [ 'tags', ] as const; -/** Snowflake uses uppercase column names. */ -const SNOWFLAKE_RULE_EXECUTIONS_COLUMNS = [ - 'DS', - 'TS', - 'ITEM_TYPE_NAME', - 'ITEM_TYPE_ID', - 'ITEM_ID', - 'ITEM_DATA', - 'RESULT', - 'ENVIRONMENT', - 'PASSED', - 'RULE_ID', - 'RULE', - 'POLICY_NAMES', - 'TAGS', -] as const; - class UserHistoryQueries { constructor( private readonly dialect: Dependencies['DataWarehouseDialect'], private readonly warehouse: Dependencies['DataWarehouse'], ) {} - private get kysely(): Kysely { + private get kysely(): Kysely { return this.dialect.getKyselyInstance(); } - private isClickhouseProvider(): boolean { - return this.warehouse.getProvider().toLowerCase() === 'clickhouse'; - } - async getUserRuleExecutionsHistory( orgId: string, userItemIdentifier: ItemIdentifier, ) { const lowercaseUserId = userItemIdentifier.id.toLowerCase(); - if (this.isClickhouseProvider()) { - return this.getUserRuleExecutionsHistoryClickhouse( - orgId, - userItemIdentifier, - lowercaseUserId, - ); - } - - return this.getUserRuleExecutionsHistorySnowflake( - orgId, - userItemIdentifier, - lowercaseUserId, - ); - } - - private async getUserRuleExecutionsHistoryClickhouse( - orgId: string, - userItemIdentifier: ItemIdentifier, - lowercaseUserId: string, - ) { - // ClickHouse uses lowercase column names; cast to escape Snowflake schema typing. // eslint-disable-next-line @typescript-eslint/no-explicit-any const kyselyAny = this.kysely as unknown as Kysely>; const makeQuery = (startDate: Date, endDate: Date) => { @@ -92,7 +48,7 @@ class UserHistoryQueries { const endDateString = getUtcDateOnlyString(endDate); return kyselyAny .selectFrom('RULE_EXECUTIONS') - .select([...CLICKHOUSE_RULE_EXECUTIONS_COLUMNS]) + .select([...RULE_EXECUTIONS_COLUMNS]) .where('org_id', '=', orgId) .where('passed', '=', true) .where(({ ref, fn, eb, and }) => @@ -118,11 +74,11 @@ class UserHistoryQueries { ); const rows = results.flat() as Array>; return rows.map((result) => ({ - date: sfDateToDateOnlyString( - result.ds as Parameters[0], + date: warehouseDateToDateOnlyString( + result.ds as Parameters[0], ), - ts: sfDateToDate( - result.ts as Parameters[0], + ts: warehouseDateToDate( + result.ts as Parameters[0], ), itemTypeName: result.item_type_name as string, itemTypeId: result.item_type_id as string, @@ -137,62 +93,6 @@ class UserHistoryQueries { tags: (result.tags ?? []) as string[], })); } - - private async getUserRuleExecutionsHistorySnowflake( - orgId: string, - userItemIdentifier: ItemIdentifier, - lowercaseUserId: string, - ) { - const makeQuery = (startDate: Date, endDate: Date) => { - const startDateString = getUtcDateOnlyString(startDate); - const endDateString = getUtcDateOnlyString(endDate); - return this.kysely - .selectFrom('RULE_EXECUTIONS') - .select([...SNOWFLAKE_RULE_EXECUTIONS_COLUMNS]) - .where('ORG_ID', '=', orgId) - .where('PASSED', '=', true) - .where(({ ref, fn, eb, and }) => - and([ - eb('ITEM_CREATOR_TYPE_ID', '=', userItemIdentifier.typeId), - eb(fn('LOWER', ['ITEM_CREATOR_ID']), '=', lowercaseUserId), - sql`${ref('DS')} BETWEEN ${startDateString} AND ${endDateString}`, - ]), - ) - .orderBy('ENVIRONMENT', 'desc') - .orderBy('PASSED', 'desc') - .orderBy('TS', 'desc'); - }; - const now = Date.now(); - const dateRanges = Array.from(Array(6), (_, i) => [ - new Date(now - (i + 1) * WEEK_MS * 2), - new Date(now - i * WEEK_MS * 2), - ]); - const results = await Promise.all( - dateRanges.map(async ([startDate, endDate]) => - makeQuery(startDate, endDate).execute(), - ), - ); - const rows = results.flat(); - return rows.map((result: Record) => ({ - date: sfDateToDateOnlyString( - result.DS as Parameters[0], - ), - ts: sfDateToDate( - result.TS as Parameters[0], - ), - itemTypeName: result.ITEM_TYPE_NAME as string, - itemTypeId: result.ITEM_TYPE_ID as string, - contentId: result.ITEM_ID as string, - content: result.ITEM_DATA ?? null, - result: result.RESULT ?? null, - environment: result.ENVIRONMENT as string, - passed: result.PASSED as boolean, - ruleId: result.RULE_ID as string, - ruleName: result.RULE as string, - policies: (result.POLICY_NAMES ?? []) as string[], - tags: (result.TAGS ?? []) as string[], - })); - } } export default inject( diff --git a/server/services/itemInvestigationService/itemInvestigationService.ts b/server/services/itemInvestigationService/itemInvestigationService.ts index 5df4209..25849bd 100644 --- a/server/services/itemInvestigationService/itemInvestigationService.ts +++ b/server/services/itemInvestigationService/itemInvestigationService.ts @@ -224,7 +224,7 @@ export class ItemInvestigationService { : ScyllaNilItemIdentifier, item_data: jsonStringify(item.data), //TODO: create datestamp in submitItems route and use - // for write to both scylla and snowflake + // for write to both Scylla and the data warehouse item_submission_time: new Date(), item_synthetic_created_at: syntheticCreatedAt, synthetic_thread_id: syntheticThreadId, @@ -477,7 +477,7 @@ export class ItemInvestigationService { * them, even if they exist. * * NB: Right now, we check the partial items endpoint before checking - * snowflake. This is likely fine for now, but the partial items endpoint + * the data warehouse. This is likely fine for now, but the partial items endpoint * could return an entirely different submission (if the data has been mutated * on their side), which could lead to unexpected behavior. It's fine to keep * for now but we should keep an eye out for bugs that could stem from this. @@ -521,7 +521,7 @@ export class ItemInvestigationService { // attempt to fetch the item's data from there. Most users won't have a // partial items endpoint, so this should only apply in a handful of cases // If this fails for any reason, just coerce the error to an empty array so - // that we'll move on to trying snowflake. + // that we'll move on to trying the data warehouse. const partialItemsResult = await this.partialItemsEndpoint .getPartialItems(orgId, [itemIdentifier]) .catch((_e) => []); @@ -769,8 +769,8 @@ export class ItemInvestigationService { break; } } - //TODO: Fallback to Snowflake for parents not found - // in initial snowflake query + //TODO: Fallback to the data warehouse for parents not found + // in the initial Scylla query } async *#getSiblingStream(opts: { diff --git a/server/services/itemInvestigationService/utils.ts b/server/services/itemInvestigationService/utils.ts index 15a7370..0e38cfe 100644 --- a/server/services/itemInvestigationService/utils.ts +++ b/server/services/itemInvestigationService/utils.ts @@ -32,9 +32,9 @@ export function getSyntheticThreadId( } /** - * TODO: Eventually this should handle rows from both snowflake and scylla more - * naturally, but right now we're required to convert the snowflake shape into a - * scylla-specific shape + * TODO: Eventually this should handle rows from both the data warehouse and Scylla more + * naturally, but right now we're required to convert the warehouse row shape into a + * Scylla-specific shape */ export function dbRowToItemSubmissionWithItemTypeIdentifier(row: { submission_id: SubmissionId; diff --git a/server/services/itemProcessingService/fieldTypeHandlers.ts b/server/services/itemProcessingService/fieldTypeHandlers.ts index 7133ec4..c1f2460 100644 --- a/server/services/itemProcessingService/fieldTypeHandlers.ts +++ b/server/services/itemProcessingService/fieldTypeHandlers.ts @@ -82,7 +82,7 @@ const scalarGetValues = (value: T): [T] => [value]; export const fieldTypeHandlers: Handlers = { // NB: for ids (including user ids), we accept numbers or strings for user // convenience, but we always coerce the value to a string so that we're not -// mixing strings and numbers in the same json column in snowflake (which +// mixing strings and numbers in the same json column in the data warehouse (which // could drastically reduce perf). [ScalarTypes.USER_ID]: { // TODO (COOP-745): USER_ID will be deprecated @@ -281,9 +281,9 @@ function coerceMediaUrlInput(value: unknown) { ? null : isValidUrl(value) ? // NB: `value` here CANNOT be typed as a UrlString, because we have some - // legacy submissions in Snowflake where the string is not a valid URL. + // legacy submissions in the data warehouse where the string is not a valid URL. // (Usually, it's the empty string, which previously got through.) - // TODO: replace all those submissions in snowflake with `field: null`, + // TODO: replace all those submissions in the data warehouse with `field: null`, // and then update the type here/in ScalarTypeRuntimeType. { url: value } : err; diff --git a/server/services/itemProcessingService/makeItemSubmission.ts b/server/services/itemProcessingService/makeItemSubmission.ts index e0c0474..381f5fb 100644 --- a/server/services/itemProcessingService/makeItemSubmission.ts +++ b/server/services/itemProcessingService/makeItemSubmission.ts @@ -74,7 +74,7 @@ export type ItemSubmission = Opaque< * scheme. * * Submission time is optional because we'd have to do some semi-involved - * Snowflake migrations to populate it on existing submissions. However, the + * data warehouse migrations to populate it on existing submissions. However, the * intention is to store it for all new submissions going forward (although * that's unfortunately difficult to enforce). Submissions for the same item * without a `submissionTime` have undefined ordering. @@ -131,7 +131,7 @@ export type ItemSubmission = Opaque< * * It accepts creatorId and creatorTypeId as separate inputs in order to * populate the `ItemSubmission.creator` when creating an `ItemSubmission` from - * legacy a Snowflake row. In those rows, the creator info is only stored in + * legacy a data warehouse row. In those rows, the creator info is only stored in * separate columns (i.e., it's not part of the item data). Once we add the * creator info to the data in these legacy submissions, we can remove creatorId * and creatorTypeId as explicit arguments. Until then, we make them required to @@ -139,7 +139,7 @@ export type ItemSubmission = Opaque< * to select those columns. * * When this is called with new records as it's input, where the data does hold - * the creator (e.g., in the REPORTS snowflake table), creatorId and + * the creator (e.g., in the REPORTS warehouse table), creatorId and * creatorTypeId can be explicitly set null, and the function will look in the * data to try to fill in the creator. */ @@ -194,7 +194,7 @@ export async function submissionDataToItemSubmission( * first enters our system, as it assigns the submissionId and does validation. * * It's _not_ meant to be used when we're reconstituting an ItemSubmission from - * stored data (e.g., in Snowflake), as we don't want to assign a new + * stored data (e.g., in the data warehouse), as we don't want to assign a new * SubmissionId in that case. For that, see {@link submissionDataToItemSubmission}. */ export async function rawItemSubmissionToItemSubmission( @@ -308,7 +308,7 @@ function getCreator(itemType: ItemType, itemData: NormalizedItemData) { * * To ensure uniqueness and unguessability, we now generate these as UUID v4s. * However, we previously used a mix of uuid v1 (our code's old default), uuid - * v4 (when backfilling some rows in snowlfake), and (due to bugs) some strings + * v4 (when backfilling some rows in the data warehouse), and (due to bugs) some strings * that weren't uuids at all. Therefore, code consuming SubmissionIds can't * assume anything about it other than that it's a unique, opaque string. * diff --git a/server/services/manualReviewToolService/dbTypes.ts b/server/services/manualReviewToolService/dbTypes.ts index 8312009..095902e 100644 --- a/server/services/manualReviewToolService/dbTypes.ts +++ b/server/services/manualReviewToolService/dbTypes.ts @@ -1,7 +1,10 @@ import { type ColumnType, type GeneratedAlways } from 'kysely'; import { type ConditionSetWithResultAsLogged } from '../analyticsLoggers/ruleExecutionLoggingUtils.js'; -import { type FilterableSfDate, type SfDate } from '../../snowflake/types.js'; +import { + type FilterableWarehouseDate, + type WarehouseDate, +} from '../../storage/dataWarehouse/warehouseDateTypes.js'; import { type JsonOf } from '../../utils/encoding.js'; import { type NormalizedItemData } from '../itemProcessingService/toNormalizedItemDataOrErrors.js'; import { @@ -35,8 +38,8 @@ export type RoutingRuleExecutionsRow = { CORRELATION_ID: string | null; RESULT: ConditionSetWithResultAsLogged | null; PASSED: boolean; - TS: ColumnType; - DS: ColumnType; + TS: ColumnType; + DS: ColumnType; DESTINATION_QUEUE_ID: string; ITEM_ID: string; ITEM_TYPE_ID: string; @@ -245,6 +248,6 @@ export type ManualReviewToolServicePg = { }; }; -export type ManualReviewToolServiceSnowflakeSchema = { +export type ManualReviewToolServiceWarehouseSchema = { 'MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS': RoutingRuleExecutionsRow; }; diff --git a/server/services/manualReviewToolService/index.ts b/server/services/manualReviewToolService/index.ts index f9d0019..741e6c7 100644 --- a/server/services/manualReviewToolService/index.ts +++ b/server/services/manualReviewToolService/index.ts @@ -34,9 +34,9 @@ export { export { type ManualReviewDecisionComponent } from './modules/JobDecisioning.js'; // Needs to be exported because it's used in the contract for -// snowflakeEventualWrite. +// warehouse eventual-write tables. export { - type ManualReviewToolServiceSnowflakeSchema, + type ManualReviewToolServiceWarehouseSchema, type ManualReviewToolServicePg, } from './dbTypes.js'; diff --git a/server/services/ncmecService/ncmecEnqueueToMrt.ts b/server/services/ncmecService/ncmecEnqueueToMrt.ts index 30bdd0a..a3475e4 100644 --- a/server/services/ncmecService/ncmecEnqueueToMrt.ts +++ b/server/services/ncmecService/ncmecEnqueueToMrt.ts @@ -182,13 +182,13 @@ export default class NcmecEnqueueToMrt { return { status: 'SKIPPED' }; } - // TODO: Write this to a snowflake table and enqueue based off of a job instead + // TODO: Write this to a data warehouse table and enqueue based off of a job instead await this.manualReviewToolService.enqueue( { orgId, createdAt, // TODO: Pass policies through NcmecService.eventuallyEnqueue into - // snowflake and ultimately into here. Note that + // the data warehouse and ultimately into here. Note that // NcmecService.eventuallyEnqueue is called inside submitReport, which has // access to the policies passed in with the report, and inside the // ActionPublisher, which has the policies that come along with the diff --git a/server/services/reportingService/dbTypes.ts b/server/services/reportingService/dbTypes.ts index 10b62a4..844d083 100644 --- a/server/services/reportingService/dbTypes.ts +++ b/server/services/reportingService/dbTypes.ts @@ -3,7 +3,10 @@ import { type ColumnType, type GeneratedAlways } from 'kysely'; import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js'; import { type ConditionSetWithResultAsLogged } from '../analyticsLoggers/ruleExecutionLoggingUtils.js'; -import { type FilterableSfDate, type SfDate } from '../../snowflake/types.js'; +import { + type FilterableWarehouseDate, + type WarehouseDate, +} from '../../storage/dataWarehouse/warehouseDateTypes.js'; import { type JsonOf } from '../../utils/encoding.js'; import { type ItemSubmissionWithTypeIdentifier, @@ -43,10 +46,10 @@ export type ReportSubmissionsRow = { // (meaning it wasn't manually added to the reporting queue by a user) REPORTER_USER_ID: string | null; REPORTER_KIND: ReporterKind; - REPORTED_AT: ColumnType; + REPORTED_AT: ColumnType; POLICY_ID: string | null; REPORTED_FOR_REASON: string | null; - TS: ColumnType; + TS: ColumnType; REPORTER_USER_ITEM_TYPE_ID: string | null; REPORTED_ITEM_ID: string; REPORTED_ITEM_DATA: NormalizedItemData; @@ -80,7 +83,7 @@ export type ReportSubmissionsRow = { ); export type AppealSubmissionsRow = { - TS: ColumnType; + TS: ColumnType; ORG_ID: string; REQUEST_ID: string; APPEAL_ID: string; @@ -88,7 +91,7 @@ export type AppealSubmissionsRow = { // (meaning it wasn't manually added to the reporting queue by a user) APPEALED_BY_USER_ID: string | null; APPEALED_BY_USER_ITEM_TYPE_ID: string | null; - APPEALED_AT: ColumnType; + APPEALED_AT: ColumnType; APPEAL_REASON: string | null; ACTIONS_TAKEN: string[]; ACTIONED_ITEM_ID: string; @@ -126,8 +129,8 @@ export type ReportingRuleExecutionsRow = { CORRELATION_ID: string; RESULT: ConditionSetWithResultAsLogged; PASSED: boolean; - TS: ColumnType; - DS: ColumnType; + TS: ColumnType; + DS: ColumnType; POLICY_NAMES: readonly string[]; POLICY_IDS: readonly string[]; ITEM_ID: string; @@ -146,16 +149,16 @@ export type ReportingRuleExecutionsRow = { export type ReportingRuleExecutionStatisticsRow = { ORG_ID: string; RULE_ID: string; - RULE_VERSION: SfDate; + RULE_VERSION: WarehouseDate; NUM_PASSES: number; NUM_RUNS: number; - TS_START_INCLUSIVE: SfDate; - TS_END_EXCLUSIVE: SfDate; + TS_START_INCLUSIVE: WarehouseDate; + TS_END_EXCLUSIVE: WarehouseDate; RULE_ENVIRONMENT: string | null; RULE_POLICY_NAMES: string[] | null; RULE_POLICY_IDS: string[] | null; }; -export type ReportingServiceSnowflakeSchema = { +export type ReportingServiceWarehouseSchema = { 'REPORTING_SERVICE.REPORTS': ReportSubmissionsRow; 'REPORTING_SERVICE.APPEALS': AppealSubmissionsRow; 'REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS': ReportingRuleExecutionsRow; diff --git a/server/services/reportingService/index.ts b/server/services/reportingService/index.ts index 4283a34..0a1f8c9 100644 --- a/server/services/reportingService/index.ts +++ b/server/services/reportingService/index.ts @@ -1,8 +1,8 @@ import { type ReportingRuleErrorType } from './ReportingRules.js'; // Needs to be exported because it's used in the contract for -// snowflakeEventualWrite. -export { type ReportingServiceSnowflakeSchema } from './dbTypes.js'; +// warehouse eventual-write tables. +export { type ReportingServiceWarehouseSchema } from './dbTypes.js'; export { type ReportingService, default as makeReportingService, diff --git a/server/services/reportingService/reportingService.ts b/server/services/reportingService/reportingService.ts index ad24288..6d57c66 100644 --- a/server/services/reportingService/reportingService.ts +++ b/server/services/reportingService/reportingService.ts @@ -120,7 +120,7 @@ function makeReportingService( reported_item_type_id: reportedItem.itemType.id, reported_item_type_kind: reportedItem.itemType.kind, // nb: this is intentionally logged as a string not json, because it - // contains JSON nulls, which are not snowflake safe. + // contains JSON nulls, which are not safe for the data warehouse JSON columns. reported_item_type_schema: reportedItem.itemType.schema, reported_item_type_schema_variant: reportedItem.itemType.schemaVariant, @@ -207,7 +207,7 @@ function makeReportingService( actioned_item_type_id: actionedItem.itemType.id, actioned_item_type_kind: actionedItem.itemType.kind, // nb: this is intentionally logged as a string not json, because it - // contains JSON nulls, which are not snowflake safe. + // contains JSON nulls, which are not safe for the data warehouse JSON columns. actioned_item_type_schema: actionedItem.itemType.schema, actioned_item_type_schema_variant: actionedItem.itemType.schemaVariant, @@ -294,7 +294,7 @@ function makeReportingService( // of the rule's behavior. The only way to do that is to use the rule history // service. Note that, even if we wanted to just use the rule's latest // version, we'd have to use the history service (rather than reading the - // latest version from snowflake), b/c Snowflake is only eventually + // latest version from the data warehouse), b/c the warehouse is only eventually // consistent (i.e., after a rule update, it won't see the new version for // up to 5 minutes, so we'll show cleary outdated samples.) const history = await this.getReportingRuleHistory( diff --git a/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.test.ts b/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.test.ts index 4ea7d3c..ad8d0e1 100644 --- a/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.test.ts +++ b/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.test.ts @@ -5,7 +5,7 @@ import makeGetRuleAnomalyDetectionStatistics from './getRuleAnomalyDetectionStat /** * @fileoverview The testing strategy here is to just snapshot the queries * that our service function is generating, and run those manually to verify - * that they work. If we update the snowflake structure, we can update the + * that they work. If we update the warehouse structure, we can update the * snapshots and manually re-run the new queries. But having these snapshots at * least makes sure we can't change inadvertently change the generated queries. */ @@ -35,7 +35,7 @@ describe('getRuleAnomalyDetectionStatistics', () => { transaction: jest.fn(), start: jest.fn(), close: jest.fn(), - getProvider: () => 'snowflake' as const, + getProvider: () => 'clickhouse' as const, }; // Scope of this is just the test suite, so mutation should be ok. @@ -53,7 +53,7 @@ describe('getRuleAnomalyDetectionStatistics', () => { queryMock.mockClear(); }); - test('should return the result from snowflake, properly formatted', async () => { + test('should return the result from the warehouse, properly formatted', async () => { const result = await getRulePassStatistics(); expect(result).toEqual([ { diff --git a/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.ts b/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.ts index dcf75f3..198d434 100644 --- a/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.ts +++ b/server/services/ruleAnomalyDetectionService/getRuleAnomalyDetectionStatistics.ts @@ -35,7 +35,7 @@ const makeGetRuleAnomalyDetectionaStatistics = } // For rule_id filtering, it'd be amazing if we could just do `rule_id in ?`, - // and then pass an array as the bind value, but the snowflake client + // and then pass an array as the bind value, but the warehouse client // doesn't support arrays as bind values. so, we use an array below for // conditions that need (or are forced) to have multiple bind values, and // then flatten below. @@ -82,7 +82,7 @@ const makeGetRuleAnomalyDetectionaStatistics = // name is a reminder that JS may trim the precision on the Date here, // but that should be ok for our purposes. approxRuleVersion: new Date(result.RULE_VERSION), - // nb: the snowflake returned value for a timestamp is a JS Date, but with + // nb: the warehouse returned value for a timestamp is a JS Date, but with // some extra methods attached to it. These methods include toString, so // we cast back to a proper Date to avoid the string representation // changing (e.g., when serializing to JSON). diff --git a/server/services/userStatisticsService/dbTypes.ts b/server/services/userStatisticsService/dbTypes.ts index 027a020..9069e90 100644 --- a/server/services/userStatisticsService/dbTypes.ts +++ b/server/services/userStatisticsService/dbTypes.ts @@ -1,7 +1,7 @@ // Types for tables in the user stats service's schema. // THESE SHOULD NOT BE USED OUTSIDE OF THIS SERVICE. -export type UserStatisticsServiceSnowflake = { +export type UserStatisticsServiceWarehouse = { 'USER_STATISTICS_SERVICE.SUBMISSION_STATS': SubmissionStats; 'USER_STATISTICS_SERVICE.LIFETIME_ACTION_STATS': LifetimeActionStats; 'USER_STATISTICS_SERVICE.USER_SCORES': UserScores; @@ -37,8 +37,8 @@ export type SubmissionStats = { // This is the item type that the user has submitted ITEM_TYPE_ID: string; NUM_SUBMISSIONS: string; - // NB: these are actually "SnowflakeDate" instances. SnowflakeDate is a - // custom class from the Snowflake driver that roughly extends Date, but + // NB: these are actually warehouse Date instances (driver-specific). The + // warehouse driver may use a custom class that roughly extends Date, but // adds a custom toString() that changes (breaks) the date's default JSON // representation. // TODO: convert these globally to Dates at the Kysely level, so we don't diff --git a/server/services/userStatisticsService/fetchUserActionStatistics.test.ts b/server/services/userStatisticsService/fetchUserActionStatistics.test.ts index 67a466f..cea7fc3 100644 --- a/server/services/userStatisticsService/fetchUserActionStatistics.test.ts +++ b/server/services/userStatisticsService/fetchUserActionStatistics.test.ts @@ -6,13 +6,14 @@ import { type QueryResult, } from 'kysely'; -import { makeMockSnowflakeDialect } from '../../snowflake/KyselyDialect.mock.js'; +import { type Dependencies } from '../../iocContainer/index.js'; +import { makeMockWarehouseDialect } from '../../test/stubs/makeMockWarehouseKyselyDialect.js'; import { type MockedFn } from '../../test/mockHelpers/jestMocks.js'; import { safePick } from '../../utils/misc.js'; import { makeFetchUserActionStatistics } from './fetchUserActionStatistics.js'; describe('fetchUserActionStatistics', () => { - let snowflakeMock: MockedFn< + let warehouseMock: MockedFn< (it: CompiledQuery) => Promise> >; let sut: ReturnType; @@ -26,7 +27,7 @@ describe('fetchUserActionStatistics', () => { // it's local to the test suite. Consider using the `makeTestWithFixture` // helper instead to make a local copy of this state for each test. // eslint-disable-next-line better-mutation/no-mutation - snowflakeMock = jest + warehouseMock = jest .fn() .mockResolvedValue({ rows: [] }); @@ -34,9 +35,16 @@ describe('fetchUserActionStatistics', () => { // it's local to the test suite. Consider using the `makeTestWithFixture` // helper instead to make a local copy of this state for each test. // eslint-disable-next-line better-mutation/no-mutation - sut = makeFetchUserActionStatistics( - new Kysely({ dialect: makeMockSnowflakeDialect(snowflakeMock) }), - ); + const kysely = new Kysely({ + dialect: makeMockWarehouseDialect(warehouseMock), + }); + const dialectMock: Dependencies['DataWarehouseDialect'] = { + getKyselyInstance: () => kysely, + destroy: jest.fn(async () => {}), + }; + + // eslint-disable-next-line better-mutation/no-mutation + sut = makeFetchUserActionStatistics(dialectMock); }); test('should generate proper query given user item identifiers', async () => { @@ -48,9 +56,9 @@ describe('fetchUserActionStatistics', () => { { id: '3', typeId: 'b' }, ], }); - expect(snowflakeMock).toHaveBeenCalledTimes(2); + expect(warehouseMock).toHaveBeenCalledTimes(2); - const queriesRan = snowflakeMock.mock.calls.map((it) => + const queriesRan = warehouseMock.mock.calls.map((it) => safePick(it[0], ['parameters', 'sql']), ); @@ -86,6 +94,6 @@ describe('fetchUserActionStatistics', () => { })); await sut({ orgId: 'x', userItemIdentifiers: largeUserIdList }); - expect(snowflakeMock.mock.calls.length).toBeGreaterThan(1); + expect(warehouseMock.mock.calls.length).toBeGreaterThan(1); }); }); diff --git a/server/services/userStatisticsService/fetchUserActionStatistics.ts b/server/services/userStatisticsService/fetchUserActionStatistics.ts index 8f57891..e52f0d1 100644 --- a/server/services/userStatisticsService/fetchUserActionStatistics.ts +++ b/server/services/userStatisticsService/fetchUserActionStatistics.ts @@ -3,8 +3,8 @@ import { type Kysely } from 'kysely'; import _ from 'lodash'; import { type ReadonlyDeep } from 'type-fest'; -import { inject } from '../../iocContainer/index.js'; -import { type UserStatisticsServiceSnowflake } from './dbTypes.js'; +import { inject, type Dependencies } from '../../iocContainer/index.js'; +import { type UserStatisticsServiceWarehouse } from './dbTypes.js'; export type UserActionStatistics = { userId: string; @@ -21,16 +21,18 @@ const { chunk, uniqBy } = _; /** * This is an internal function for querying a batch of users' lifetime action - * statistics from Snowflake. It's not called directly by consumers of the user + * statistics from the data warehouse. It's not called directly by consumers of the user * statistics service; instead, it's used by the service internally to freshen * the cache that serves consumers' requests. * * @internal */ export const makeFetchUserActionStatistics = inject( - ['KyselySnowflake'], - (snowflake: Kysely) => - async ( + ['DataWarehouseDialect'], + (dialect: Dependencies['DataWarehouseDialect']) => { + const warehouseKysely = + dialect.getKyselyInstance() as Kysely; + return async ( opts: ReadonlyDeep<{ orgId: string; userItemIdentifiers: ItemIdentifier[]; @@ -38,11 +40,11 @@ export const makeFetchUserActionStatistics = inject( ): Promise => { const { orgId, userItemIdentifiers } = opts; - // Snowflake has a published limit of ~16,000 entries in a list expression + // The warehouse has a published limit of ~16,000 entries in a list expression // (like we use in our `USER_ID IN (...)` filter), so we have to chunk the - // user ids. Snowflake also has a published limit of 1MB for the total + // user ids. The warehouse also has a published limit of 1MB for the total // length of the query (which must also coopr the size bind parameter - // values). However, we were getting Snowflake errors in practice well + // values). However, we were getting warehouse errors in practice well // below these limits, for not-totally-clear reasons. So, we set the limit // here to the biggest chunk size that worked reliably. const uniqUserItemIdentifiers = uniqBy( @@ -52,7 +54,7 @@ export const makeFetchUserActionStatistics = inject( const userItemIdentifierBatches = chunk(uniqUserItemIdentifiers, 1000); const makeQueryForBatch = (userItemIdentifiers: ItemIdentifier[]) => - snowflake + warehouseKysely .selectFrom('USER_STATISTICS_SERVICE.LIFETIME_ACTION_STATS') .select([ 'USER_ID as userId', @@ -84,5 +86,6 @@ export const makeFetchUserActionStatistics = inject( ); return results.flat(); - }, + }; + }, ); diff --git a/server/services/userStatisticsService/fetchUserSubmissionStatistics.test.ts b/server/services/userStatisticsService/fetchUserSubmissionStatistics.test.ts index 72dac57..0000dec 100644 --- a/server/services/userStatisticsService/fetchUserSubmissionStatistics.test.ts +++ b/server/services/userStatisticsService/fetchUserSubmissionStatistics.test.ts @@ -1,13 +1,14 @@ import { randomUUID } from 'crypto'; import { Kysely, type CompiledQuery, type QueryResult } from 'kysely'; -import { makeMockSnowflakeDialect } from '../../snowflake/KyselyDialect.mock.js'; +import { type Dependencies } from '../../iocContainer/index.js'; +import { makeMockWarehouseDialect } from '../../test/stubs/makeMockWarehouseKyselyDialect.js'; import { type MockedFn } from '../../test/mockHelpers/jestMocks.js'; import { safePick } from '../../utils/misc.js'; import { makeFetchUserSubmissionStatistics } from './fetchUserSubmissionStatistics.js'; describe('fetchUserSubmissionStatistics', () => { - let snowflakeMock: MockedFn< + let warehouseMock: MockedFn< (it: CompiledQuery) => Promise> >; let sut: ReturnType; @@ -17,15 +18,22 @@ describe('fetchUserSubmissionStatistics', () => { // it's local to the test suite. Consider using the `makeTestWithFixture` // helper instead to make a local copy of this state for each test. // eslint-disable-next-line better-mutation/no-mutation - snowflakeMock = jest.fn(async (_it) => Promise.resolve({ rows: [] })); + warehouseMock = jest.fn(async (_it) => Promise.resolve({ rows: [] })); // This mutation is safe (while we're not running tests concurrently) as // it's local to the test suite. Consider using the `makeTestWithFixture` // helper instead to make a local copy of this state for each test. // eslint-disable-next-line better-mutation/no-mutation - sut = makeFetchUserSubmissionStatistics( - new Kysely({ dialect: makeMockSnowflakeDialect(snowflakeMock) }), - ); + const kysely = new Kysely({ + dialect: makeMockWarehouseDialect(warehouseMock), + }); + const dialectMock: Dependencies['DataWarehouseDialect'] = { + getKyselyInstance: () => kysely, + destroy: jest.fn(async () => {}), + }; + + // eslint-disable-next-line better-mutation/no-mutation + sut = makeFetchUserSubmissionStatistics(dialectMock); }); test('should generate proper query given org + user ids only', async () => { @@ -38,9 +46,9 @@ describe('fetchUserSubmissionStatistics', () => { ], }); - expect(snowflakeMock).toHaveBeenCalledTimes(2); + expect(warehouseMock).toHaveBeenCalledTimes(2); - const queriesRan = snowflakeMock.mock.calls.map((it) => + const queriesRan = warehouseMock.mock.calls.map((it) => safePick(it[0], ['parameters', 'sql']), ); @@ -76,7 +84,7 @@ describe('fetchUserSubmissionStatistics', () => { })); await sut({ orgId: 'x', userItemIdentifiers: largeUserIdList }); - expect(snowflakeMock.mock.calls.length).toBeGreaterThan(1); + expect(warehouseMock.mock.calls.length).toBeGreaterThan(1); }); test('should generate proper query given user/org ids + date filters', async () => { @@ -105,9 +113,9 @@ describe('fetchUserSubmissionStatistics', () => { startTime: new Date('2020-02-01T00:00:00Z'), }); - expect(snowflakeMock).toHaveBeenCalledTimes(3); + expect(warehouseMock).toHaveBeenCalledTimes(3); - const queriesRan = snowflakeMock.mock.calls.map((it) => + const queriesRan = warehouseMock.mock.calls.map((it) => safePick(it[0], ['parameters', 'sql']), ); diff --git a/server/services/userStatisticsService/fetchUserSubmissionStatistics.ts b/server/services/userStatisticsService/fetchUserSubmissionStatistics.ts index 1201908..e1851e1 100644 --- a/server/services/userStatisticsService/fetchUserSubmissionStatistics.ts +++ b/server/services/userStatisticsService/fetchUserSubmissionStatistics.ts @@ -2,9 +2,9 @@ import { type ItemIdentifier } from '@roostorg/types'; import { type Kysely } from 'kysely'; import _ from 'lodash'; -import { inject } from '../../iocContainer/index.js'; +import { inject, type Dependencies } from '../../iocContainer/index.js'; import { jsonStringify } from '../../utils/encoding.js'; -import { type UserStatisticsServiceSnowflake } from './dbTypes.js'; +import { type UserStatisticsServiceWarehouse } from './dbTypes.js'; const { chunk, uniqBy } = _; @@ -18,16 +18,18 @@ export type UserSubmissionStatistics = { /** * This is an internal function for querying a batch of users' content - * submission statistics from Snowflake. It's not called directly by consumers + * submission statistics from the data warehouse. It's not called directly by consumers * of the user statistics service; instead, it's used by the service internally * to freshen the cache that serves consumers' requests. * * @internal */ export const makeFetchUserSubmissionStatistics = inject( - ['KyselySnowflake'], - (snowflake: Kysely) => - async (opts: { + ['DataWarehouseDialect'], + (dialect: Dependencies['DataWarehouseDialect']) => { + const warehouseKysely = + dialect.getKyselyInstance() as Kysely; + return async (opts: { readonly orgId: string; readonly userItemIdentifiers: readonly ItemIdentifier[]; readonly startTime?: Date; @@ -35,11 +37,11 @@ export const makeFetchUserSubmissionStatistics = inject( }): Promise => { const { startTime, endTime, orgId } = opts; - // Snowflake has a published limit of ~16,000 entries in a list expression + // The warehouse has a published limit of ~16,000 entries in a list expression // (like we use in our `USER_ID IN (...)` filter), so we have to chunk the - // user ids. Snowflake also has a published limit of 1MB for the total + // user ids. The warehouse also has a published limit of 1MB for the total // length of the query (which must also coopr the size bind parameter - // values). However, we were getting Snowflake errors in practice well + // values). However, we were getting warehouse errors in practice well // below these limits, for not-totally-clear reasons. So, we set the limit // here to the biggest chunk size that worked reliably. const uniqUserItemIdentifiers = uniqBy(opts.userItemIdentifiers, (a) => @@ -48,7 +50,7 @@ export const makeFetchUserSubmissionStatistics = inject( const userItemIdentifierBatches = chunk(uniqUserItemIdentifiers, 1000); const makeQueryForBatch = (userItemIdentifiers: ItemIdentifier[]) => { - let query = snowflake + let query = warehouseKysely .selectFrom('USER_STATISTICS_SERVICE.SUBMISSION_STATS') .select([ 'USER_ID as userId', @@ -57,7 +59,7 @@ export const makeFetchUserSubmissionStatistics = inject( // NB: we need the manual `number` type param to indicate that this // isn't returned as a bigint or a numeric string (it shouldn't be, // because a user can't possibly have that many submissions). - snowflake.fn.sum('NUM_SUBMISSIONS').as('numSubmissions'), + warehouseKysely.fn.sum('NUM_SUBMISSIONS').as('numSubmissions'), ]) .where('ORG_ID', '=', orgId) .where(({ eb, and, or }) => @@ -92,5 +94,6 @@ export const makeFetchUserSubmissionStatistics = inject( ); return results.flat(); - }, + }; + }, ); diff --git a/server/services/userStatisticsService/userStatisticsService.test.ts b/server/services/userStatisticsService/userStatisticsService.test.ts index c1bd536..9c34336 100644 --- a/server/services/userStatisticsService/userStatisticsService.test.ts +++ b/server/services/userStatisticsService/userStatisticsService.test.ts @@ -1,11 +1,11 @@ import { Kysely, type DatabaseConnection } from 'kysely'; -import { makeMockSnowflakeDialect } from '../../snowflake/KyselyDialect.mock.js'; -import { type handleSnowflakeTableChanges } from '../../snowflake/handleTableChanges.js'; +import { makeMockWarehouseDialect } from '../../test/stubs/makeMockWarehouseKyselyDialect.js'; import { makeMockPgDialect, type MockPgExecute, } from '../../test/stubs/KyselyPg.js'; +import { type UserStatisticsServiceWarehouse } from './dbTypes.js'; import { type makeFetchUserActionStatistics } from './fetchUserActionStatistics.js'; import { type makeFetchUserSubmissionStatistics } from './fetchUserSubmissionStatistics.js'; import { internalMakeUserStatisticsService } from './userStatisticsService.js'; @@ -14,50 +14,13 @@ describe('UserStatisticsService', () => { describe('refreshUserScoresCache', () => { test.todo('should fetch stats w/ batching and update accordingly'); - test('should properly upsert new scores into pg', async () => { - // Arrange. - const snowflakeMock = jest + test('is a no-op without warehouse change streams', async () => { + const warehouseMock = jest .fn() .mockImplementation(async (_query) => { return { rows: [] }; }); - const handleSnowflakeTableChangesMock: handleSnowflakeTableChanges = async ( - _kysely, - _consumerId, - toWatch, - buildQuery, - cb, - ) => { - // Verify that the user is watching the expected table - expect(toWatch).toEqual({ - schema: 'USER_STATISTICS_SERVICE', - table: 'SUBMISSION_STATS', - }); - - // and verify that they built a query for the expected columns - const distinctMock = jest.fn(); - const selectMock = jest - .fn() - .mockReturnValueOnce({ distinct: distinctMock }); - - buildQuery({ select: selectMock } as any); - - expect(selectMock).toBeCalledTimes(1); - expect(selectMock).toBeCalledWith([ - 'USER_ID', - 'USER_TYPE_ID', - 'ORG_ID', - ]); - expect(distinctMock).toBeCalledTimes(1); - - // in which case we can pass fake rows in that shape to the cb. - await cb([ - { USER_ID: '1', USER_TYPE_ID: 'a', ORG_ID: 'org-x' }, - { USER_ID: '2', USER_TYPE_ID: 'b', ORG_ID: 'org-x' }, - ] as unknown as Parameters[0]); - }; - const pgReadMock = jest .fn() .mockResolvedValue({ rows: [], command: 'SELECT', rowCount: 0 }); @@ -68,82 +31,30 @@ describe('UserStatisticsService', () => { const fetchUserActionStatisticsMock = jest .fn>() - .mockResolvedValue([ - { - userId: '2', - userTypeId: 'b', - orgId: 'org-x', - actionId: 'a', - actorId: null, - policyId: null, - itemSubmissionIds: ['x'], - count: 1, - }, - ]); + .mockResolvedValue([]); const fetchUserSubmissionStatisticsMock = jest .fn>() - .mockResolvedValue([ - { - userId: '1', - userTypeId: 'a', - orgId: 'org-x', - itemTypeId: 'a', - numSubmissions: 5, - }, - { - userId: '2', - userTypeId: 'b', - orgId: 'org-x', - itemTypeId: 'a', - numSubmissions: 1, - }, - ]); + .mockResolvedValue([]); + + const warehouseKysely = new Kysely({ + dialect: makeMockWarehouseDialect(warehouseMock), + }); const sut = internalMakeUserStatisticsService( new Kysely({ dialect: makeMockPgDialect(pgWriteMock) }), new Kysely({ dialect: makeMockPgDialect(pgReadMock) }), - new Kysely({ dialect: makeMockSnowflakeDialect(snowflakeMock) }), - handleSnowflakeTableChangesMock, + warehouseKysely, fetchUserActionStatisticsMock, fetchUserSubmissionStatisticsMock, ); - // Act. await sut.refreshUserScoresCache(async () => []); - // Assert that it did an upsert of the new scores into pg. - expect(pgWriteMock.mock.calls).toMatchInlineSnapshot(` - [ - [ - { - "parameters": [], - "sql": "begin", - }, - ], - [ - { - "parameters": [ - 5, - "1", - "a", - "org-x", - 5, - "2", - "b", - "org-x", - ], - "sql": "insert into "user_statistics_service"."user_scores" ("score", "user_id", "user_type_id", "org_id") values ($1, $2, $3, $4), ($5, $6, $7, $8) on conflict ("user_id", "user_type_id", "org_id") do update set "score" = "excluded"."score"", - }, - ], - [ - { - "parameters": [], - "sql": "commit", - }, - ], - ] - `); + expect(pgWriteMock).not.toHaveBeenCalled(); + expect(warehouseMock).not.toHaveBeenCalled(); + expect(fetchUserActionStatisticsMock).not.toHaveBeenCalled(); + expect(fetchUserSubmissionStatisticsMock).not.toHaveBeenCalled(); }); }); }); diff --git a/server/services/userStatisticsService/userStatisticsService.ts b/server/services/userStatisticsService/userStatisticsService.ts index ba0953d..e180a33 100644 --- a/server/services/userStatisticsService/userStatisticsService.ts +++ b/server/services/userStatisticsService/userStatisticsService.ts @@ -4,25 +4,14 @@ */ import { type ItemIdentifier } from '@roostorg/types'; import { sql, type Kysely } from 'kysely'; -import _ from 'lodash'; -import pLimit from 'p-limit'; import { type ReadonlyDeep } from 'type-fest'; import { inject, type Dependencies } from '../../iocContainer/index.js'; import { type PolicyActionPenalties } from '../../models/OrgModel.js'; -import { - makeHandleSnowflakeTableChanges, - type handleSnowflakeTableChanges, -} from '../../snowflake/handleTableChanges.js'; -import { jsonParse, jsonStringify, type JsonOf } from '../../utils/encoding.js'; -import { - computeUserScore, - initialUserScore, - type UserScore, -} from './computeUserScore.js'; +import { initialUserScore, type UserScore } from './computeUserScore.js'; import { type UserStatisticsServicePg, - type UserStatisticsServiceSnowflake, + type UserStatisticsServiceWarehouse, } from './dbTypes.js'; import { makeFetchUserActionStatistics, @@ -33,16 +22,14 @@ import { type UserSubmissionStatistics, } from './fetchUserSubmissionStatistics.js'; -const { groupBy, chunk } = _; - // NB: This function -- which is exported both from this file and from index.js, // and is used for constructing the UserStatisticsService from the outside world // -- doesn't allow the caller to provide a custom implementation for // `fetchUserActionStatistics` or `fetchUserSubmissionStatistics`, because // customizing those isn't part of the user statistics service's public API. // That's mostly because any implementation other than the one hardcoded below -// wouldn't work irl: those functions read data from specific tables in -// Snowflake which other methods in this service also depend on (e.g., +// wouldn't work irl: those functions read data from specific warehouse tables +// which other methods in this service also depend on (e.g., // `refreshUserScoresCache`), so any alternate implementation would lead to // inconsistent data between methods. However, the // `internalMakeUserStatisticsService` function defined in this file, which is @@ -51,27 +38,26 @@ const { groupBy, chunk } = _; function makeUserStatisticsService( pgQuery: Kysely, pgQueryReplica: Kysely, - snowflakeQuery: Kysely, - tracer: Dependencies['Tracer'], + dialect: Dependencies['DataWarehouseDialect'], + _tracer: Dependencies['Tracer'], ) { - const handleSnowflakeTableChanges = makeHandleSnowflakeTableChanges(tracer); + const warehouseQuery = + dialect.getKyselyInstance() as Kysely; return internalMakeUserStatisticsService( pgQuery, pgQueryReplica, - snowflakeQuery, - handleSnowflakeTableChanges, - makeFetchUserActionStatistics(snowflakeQuery), - makeFetchUserSubmissionStatistics(snowflakeQuery), + warehouseQuery, + makeFetchUserActionStatistics(dialect), + makeFetchUserSubmissionStatistics(dialect), ); } export function internalMakeUserStatisticsService( - pgQuery: Kysely, + _pgQuery: Kysely, pgQueryReplica: Kysely, - snowflakeQuery: Kysely, - handleSnowflakeTableChanges: handleSnowflakeTableChanges, - fetchUserActionStatistics: ReturnType, - fetchUserSubmissionStatistics: ReturnType< + warehouseQuery: Kysely, + _fetchUserActionStatistics: ReturnType, + _fetchUserSubmissionStatistics: ReturnType< typeof makeFetchUserSubmissionStatistics >, ) { @@ -93,180 +79,29 @@ export function internalMakeUserStatisticsService( }, async handleUsersWithChangedScores( - consumerId: string, - cb: ( + _consumerId: string, + _cb: ( changedUsers: { userId: string; userTypeId: string; orgId: string }[], ) => Promise, ) { - await handleSnowflakeTableChanges< - 'USER_SCORES', - 'USER_STATISTICS_SERVICE', - UserStatisticsServiceSnowflake, - { userId: string; userTypeId: string; orgId: string } - >( - snowflakeQuery, - consumerId, - { table: 'USER_SCORES', schema: 'USER_STATISTICS_SERVICE' }, - (builder) => - builder - .select([ - 'USER_ID as userId', - 'USER_TYPE_ID as userTypeId', - 'ORG_ID as orgId', - ]) - .distinct(), - cb, - ); + // Previously consumed warehouse streams on USER_SCORES; disabled until + // replaced with a warehouse-agnostic change feed. }, async refreshUserScoresCache( - getActionPenalties: ( + _getActionPenalties: ( orgId: string, ) => Promise>, ) { - const limited = pLimit(8); - const consumerId = 'user_scores_updater'; - await handleSnowflakeTableChanges< - 'SUBMISSION_STATS', - 'USER_STATISTICS_SERVICE', - UserStatisticsServiceSnowflake, - { USER_ID: string; USER_TYPE_ID: string; ORG_ID: string } - >( - snowflakeQuery, - consumerId, - { table: 'SUBMISSION_STATS', schema: 'USER_STATISTICS_SERVICE' }, - (builder) => - builder.select(['USER_ID', 'USER_TYPE_ID', 'ORG_ID']).distinct(), - async ( - changedUsers: readonly { - USER_ID: string; - USER_TYPE_ID: string; - ORG_ID: string; - }[], - ) => { - const usersByOrgId = groupBy(changedUsers, (it) => it.ORG_ID); - const newScores = ( - await Promise.all( - Object.entries(usersByOrgId).map(async ([orgId, rowsForOrg]) => { - const userItemIdentifiers = rowsForOrg.map((it) => ({ - id: it.USER_ID, - typeId: it.USER_TYPE_ID, - })); - const [actionStats, submissionStats, actionPenalties] = - await Promise.all([ - fetchUserActionStatistics({ userItemIdentifiers, orgId }), - fetchUserSubmissionStatistics({ - userItemIdentifiers, - orgId, - }), - // Some orgs in snowflake no longer exist in pg - // (specifically test orgs etc), so we wanna make sure not - // to throw on those. - getActionPenalties(orgId).catch((_e) => []), - ]); - - const actionStatsByUserItemIdentifier = groupBy( - actionStats, - (it) => - jsonStringify({ - id: it.userId, - typeId: it.userTypeId, - }), - ); - - const submissionStatsByUserItemIdentifier = groupBy( - submissionStats, - (it) => - jsonStringify({ - id: it.userId, - typeId: it.userTypeId, - }), - ); - - return Object.keys(submissionStatsByUserItemIdentifier).map( - (jsonItemIdentifier) => { - // This cast happens because lodash's groupBy function doesn't - // know that all the keys in the jsonItemIdentifier JSON string - // are indeed ItemIdentifiers, even though we explicitly validate - // that above when we call jsonStringify(...). - // That generic type is not preserved by the groupBy function. - const { id, typeId } = jsonParse( - jsonItemIdentifier as JsonOf, - ); - return { - orgId, - userId: id, - userTypeId: typeId, - score: computeUserScore( - submissionStatsByUserItemIdentifier[jsonItemIdentifier], - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - actionStatsByUserItemIdentifier[jsonItemIdentifier] ?? - [], - actionPenalties, - ), - }; - }, - ); - }), - ) - ).flat(); - - const now = new Date(); - const newScoresChunked = chunk(newScores, 16_000); - await pgQuery.transaction().execute(async (trx) => { - await Promise.all( - newScoresChunked.map(async (scoresChunk) => - limited(async () => - trx - .insertInto('user_statistics_service.user_scores') - .values( - scoresChunk.map((it) => ({ - score: it.score, - user_id: it.userId, - user_type_id: it.userTypeId, - org_id: it.orgId, - })), - ) - .onConflict((oc) => - oc - .columns(['user_id', 'user_type_id', 'org_id']) - .doUpdateSet({ - score: (eb) => eb.ref('excluded.score'), - }), - ) - .execute(), - ), - ), - ); - }); - - await Promise.all( - newScoresChunked.map(async (scoresChunk) => - limited(async () => - snowflakeQuery - .insertInto('USER_STATISTICS_SERVICE.USER_SCORES') - .values( - scoresChunk.map((it) => ({ - USER_ID: it.userId, - USER_TYPE_ID: it.userTypeId, - ORG_ID: it.orgId, - SCORE: it.score, - SCORE_DATE: now, - })), - ) - .execute(), - ), - ), - ); - }, - ); + // Previously consumed warehouse streams on SUBMISSION_STATS; disabled until + // replaced with a warehouse-agnostic incremental refresh. }, async getUserActionCountsByPolicy( orgId: string, userItemIdentifier: ItemIdentifier, ) { - return snowflakeQuery + return warehouseQuery .selectFrom('USER_STATISTICS_SERVICE.LIFETIME_ACTION_STATS') .select([ 'ACTION_ID as actionId', @@ -285,11 +120,11 @@ export function internalMakeUserStatisticsService( orgId: string, userItemIdentifier: ItemIdentifier, ) { - return snowflakeQuery + return warehouseQuery .selectFrom('USER_STATISTICS_SERVICE.SUBMISSION_STATS') .select([ 'ITEM_TYPE_ID as itemTypeId', - snowflakeQuery.fn.sum('NUM_SUBMISSIONS').as('count'), + warehouseQuery.fn.sum('NUM_SUBMISSIONS').as('count'), ]) .where('ORG_ID', '=', orgId) .where('USER_TYPE_ID', '=', userItemIdentifier.typeId) @@ -308,7 +143,7 @@ export default inject( [ 'KyselyPg', 'KyselyPgReadReplica', - 'KyselySnowflake', + 'DataWarehouseDialect', 'Tracer', ], makeUserStatisticsService, diff --git a/server/shim/snowflake-promise.d.ts b/server/shim/snowflake-promise.d.ts deleted file mode 100644 index 6a20bc1..0000000 --- a/server/shim/snowflake-promise.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare module "snowflake-promise" { - export class Snowflake { - constructor(connOpts: unknown); - connect(): Promise; - destroy(): Promise; - execute(sqlText: string, binds?: any[]): Promise; - } -} diff --git a/server/snowflake/KyselyDialect.mock.ts b/server/snowflake/KyselyDialect.mock.ts deleted file mode 100644 index b8ef24d..0000000 --- a/server/snowflake/KyselyDialect.mock.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type CompiledQuery, type QueryResult } from 'kysely'; - -import { type MockedFn } from '../test/mockHelpers/jestMocks.js'; -import { SnowflakeDialect } from './KyselyDialect.js'; - -export function makeMockSnowflakeDialect( - executeMockFn: MockedFn<(it: CompiledQuery) => Promise>>, -) { - const throwNotSupported = () => { - throw new Error('not supported'); - }; - - return new SnowflakeDialect({ - connection: { - async acquireConnection() { - return { executeQuery: executeMockFn, streamQuery: throwNotSupported }; - }, - async releaseConnection() {}, - async destroyAllResources() {}, - }, - }); -} diff --git a/server/snowflake/KyselyDialect.ts b/server/snowflake/KyselyDialect.ts deleted file mode 100644 index 557cbad..0000000 --- a/server/snowflake/KyselyDialect.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* eslint-disable max-classes-per-file */ -import { - CompiledQuery, - DefaultQueryCompiler, - type DatabaseConnection, - type Dialect, - type Driver, - type Kysely, - type QueryResult, - type TransactionSettings, -} from 'kysely'; -import { type Snowflake } from './snowflake-wrapper.js'; - -import makeSnowflakeConnectionPool, { - type SnowflakeConnectionSettings, - type SnowflakePoolOptions, -} from './makeConnectionPool.js'; - -type SnowflakeDriverConfig = { - acquireConnection(): Promise; - releaseConnection(conn: DatabaseConnection): Promise; - destroyAllResources(): Promise; -}; - -/** - * An adapter for integrating Kysely with Snowflake. - */ -export class SnowflakeDialect implements Dialect { - constructor( - private readonly opts: { - connection: SnowflakeConnectionSettings | SnowflakeDriverConfig; - pool?: SnowflakePoolOptions; - }, - ) {} - - createAdapter() { - return { - supportsTransactionalDdl: false, - supportsReturning: false, - acquireMigrationLock(_db: Kysely) { - throw new Error('Snowflake migrations with kysely not supported.'); - }, - releaseMigrationLock(_db: Kysely) { - throw new Error('Snowflake migrations with kysely not supported.'); - }, - }; - } - - createDriver() { - const driverConfig = - 'acquireConnection' in this.opts.connection - ? this.opts.connection - : ((): SnowflakeDriverConfig => { - // We give kysely it's own connection pool for now, rather than - // sharing the pool that the main `Snowflake` service uses, so that - // shutting down that pool doesn't leave the kysely instance in an - // invalid state. This is a bit wasteful, but it'll go away when we - // move all snowflake queries to go through kysely. - const pool = makeSnowflakeConnectionPool( - this.opts.connection, - this.opts.pool, - ); - - return { - async acquireConnection() { - return new KyselyConnection(await pool.acquire()); - }, - async releaseConnection(conn) { - return pool.release((conn as KyselyConnection).rawConnection); - }, - async destroyAllResources() { - return pool.drain().then(async () => pool.clear()); - }, - }; - })(); - - return new SnowflakeDriver(driverConfig); - } - - createIntrospector(_db: Kysely): never { - throw new Error('Introspecting snowflake not yet supported.'); - } - - createQueryCompiler() { - return new SnowflakeQueryCompiler(); - } -} - -class SnowflakeQueryCompiler extends DefaultQueryCompiler { - protected override getCurrentParameterPlaceholder() { - return ':' + String(this.numParameters); - } - protected override getLeftIdentifierWrapper() { - return '"'; - } - protected override getRightIdentifierWrapper() { - return '"'; - } -} - -class SnowflakeDriver implements Driver { - constructor(private readonly config: SnowflakeDriverConfig) {} - - public async init() {} - - public async acquireConnection() { - return this.config.acquireConnection(); - } - - public async beginTransaction( - connection: DatabaseConnection, - settings: TransactionSettings, - ) { - const { isolationLevel } = settings; - if ( - isolationLevel && - isolationLevel !== 'read committed' && - isolationLevel !== 'repeatable read' - ) { - throw new Error( - 'Snowflake only supports "read committed" and "repeatable read" isolation.', - ); - } - - await connection.executeQuery(CompiledQuery.raw(`begin`)); - } - - public async commitTransaction(connection: DatabaseConnection) { - await connection.executeQuery(CompiledQuery.raw(`commit`)); - } - - public async rollbackTransaction(connection: DatabaseConnection) { - await connection.executeQuery(CompiledQuery.raw(`rollback`)); - } - - public async releaseConnection(conn: DatabaseConnection) { - await this.config.releaseConnection(conn); - } - - public async destroy() { - return this.config.destroyAllResources(); - } -} - -class KyselyConnection implements DatabaseConnection { - constructor(public readonly rawConnection: Snowflake) {} - - async executeQuery(compiledQuery: CompiledQuery): Promise> { - return { - rows: await this.rawConnection.execute( - compiledQuery.sql, - // snowflake.execute doesn't mutate the binds its given, - // but the types don't reflect that. - compiledQuery.parameters satisfies readonly unknown[] as unknown[], - ), - }; - } - - streamQuery(_: unknown, __: unknown): never { - throw new Error('Snowflake streaming not yet supported.'); - } -} diff --git a/server/snowflake/handleTableChanges.test.ts b/server/snowflake/handleTableChanges.test.ts deleted file mode 100644 index f57b762..0000000 --- a/server/snowflake/handleTableChanges.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Kysely, type DatabaseConnection } from 'kysely'; - -import { getBottleContainerWithIOMocks } from '../test/setupMockedServer.js'; -import { safePick } from '../utils/misc.js'; -import { makeMockSnowflakeDialect } from './KyselyDialect.mock.js'; -import { makeHandleSnowflakeTableChanges } from './handleTableChanges.js'; - -describe('handleSnowflakeTableChanges', () => { - test( - 'should create a stream for the consumer on the requested table, ' + - 'query that stream the requested columns, pass the result to the callback, ' + - 'and commit', - async () => { - const { Tracer } = await getBottleContainerWithIOMocks(); - // Arrange - const snowflakeMock = jest.fn( - async (it) => ({ - rows: it.sql.toLowerCase().startsWith('select') - ? [{ column1: 45 } as any] - : [], - }), - ); - const dialect = makeMockSnowflakeDialect(snowflakeMock); - const kysely = new Kysely<{ - 'some_schema.some_table': { column1: unknown; column2: unknown }; - }>({ dialect }); - - // Act - const batchSize = 300; - const handleSnowflakeTableChanges = makeHandleSnowflakeTableChanges(Tracer); - - await handleSnowflakeTableChanges( - kysely, - 'hello', - { table: 'some_table', schema: 'some_schema' }, - (builder) => - builder.select('column1').distinct().orderBy('column2', 'desc'), - async (selection) => { - expect(selection).toMatchInlineSnapshot(` - [ - { - "column1": 45, - }, - ] - `); - }, - batchSize, - ); - - // Assert - const queriesRan = snowflakeMock.mock.calls.map((it) => - safePick(it[0], ['parameters', 'sql']), - ); - expect(queriesRan).toMatchInlineSnapshot(` - [ - { - "parameters": [], - "sql": " - CREATE STREAM IF NOT EXISTS - "some_schema"."some_table_CONSUMER_hello_STREAM" ON TABLE "some_schema"."some_table";", - }, - { - "parameters": [], - "sql": "begin", - }, - { - "parameters": [ - 300, - 0, - ], - "sql": "select distinct "column1" from "some_schema"."some_table_CONSUMER_hello_STREAM" as "stream" order by "column2" desc limit :1 offset :2", - }, - { - "parameters": [], - "sql": "insert into "PUBLIC"."ALL_ORGS" ("ID") select 'ignored' as "dummy" from "some_schema"."some_table_CONSUMER_hello_STREAM" as "stream" where 1 = 0", - }, - { - "parameters": [], - "sql": "commit", - }, - ] - `); - }, - ); -}); diff --git a/server/snowflake/handleTableChanges.ts b/server/snowflake/handleTableChanges.ts deleted file mode 100644 index 9f93b3f..0000000 --- a/server/snowflake/handleTableChanges.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { - sql, - type AliasedRawBuilder, - type Kysely, - type Selectable, - type SelectQueryBuilder, - type Transaction, -} from 'kysely'; -import _ from 'lodash'; - -import { inject } from '../iocContainer/utils.js'; -import { type SnowflakePublicSchema } from './types.js'; - -const snowflakeIdentifierRe = /^[A-Za-z0-9_$]+$/; - -// Just a helper type to abstract away a lot of kysely types that get pretty -// gnarly to have to use manually. NB: this is not totally safe, e.g., if the -// alias matches a real table's name in DbType, but it's good enough. -type SelectBuilderFor< - DbType extends object, - QualifiedTableName extends keyof DbType, - TableAlias extends string, - // eslint-disable-next-line @typescript-eslint/ban-types - Result = {}, -> = SelectQueryBuilder< - { [K in keyof DbType]: DbType[K] } & { - [K in TableAlias]: Selectable; - }, - keyof DbType | TableAlias, - Result ->; - -/** - * This function provides a passed-in callback with rows selected by buildQuery - * _since this function was last called by the given consumer and the callback - * resolved successfully for every batch_. Note that this could have potential side - * effects if the callback is not idempotent since a later batch can - * throw causing duplicate rows to be processed. - * - * Background: With user statistics, we have a couple different consumers that - * want to react only to the users whose statistics have changed. E.g., the user - * rules job wants to only run the user rules on the users whose stats have - * changed. (This will be a tiny fraction of our organization's total users; running - * every user rule on every user every few minutes would be wildly impractical.) - * Similarly, we have a job that invalidates the cache of users' user scores, - * and that needs to only compute new scores for users whose scores might have - * actually changed. - * - * To accomodate these use cases, we want to have a way for consumers of the - * user statistics service to query for the set of changed users' ids. One way - * to do this would be to have the consumer provide a date, and the service - * would return the ids of users that have changed _since that date_. That keeps - * the user statistics service nice and stateless -- at the cost, of course, of - * shifting the burden of bookkeeping to the consumers, which then would have to - * track/store the date through which they've processed successfully. - * - * In principal, it's probably better to make this bookkeeping the consumer's - * job, and not clutter up the user stats service with that state. However, for - * now, it's much easier to have the user stats service track this state, b/c - * it's got easy access to Snowflake, and Snowflake streams just store exactly - * this type of metadata. - * - * So, instead of taking a date, the user stats service asks the consumers to - * identify themselves with a unique, stable "consumerId" (a la consumer group - * ids in Kafka), and then the service will take care of tracking the last - * offset for each consumer and only returning the user ids that have changed - * since then. That's what this function does. - * - * This function has no contract for what happens if multiple concurrent calls - * are made by the same consumer. - */ -export const makeHandleSnowflakeTableChanges = inject( - ['Tracer'], - (tracer) => - async function handleSnowflakeTableChanges< - TableName extends string, - SchemaName extends string, - DbType extends { [K in `${SchemaName}.${TableName}`]: object }, - QueryResult, - >( - snowflake: Kysely, - consumerId: string, - toWatch: { readonly table: TableName; readonly schema: SchemaName }, - buildQuery: ( - builder: SelectBuilderFor< - DbType, - `${SchemaName}.${TableName}`, - 'stream' - >, - ) => SelectBuilderFor< - DbType, - `${SchemaName}.${TableName}`, - 'stream', - QueryResult - >, - cb: (changes: QueryResult[]) => Promise, - batchSize: number = 5_000, - ) { - return tracer.addActiveSpan( - { - resource: 'handleSnowflakeTableChanges', - operation: 'handleSnowflakeTableChanges', - }, - async () => { - if (!snowflakeIdentifierRe.test(consumerId)) { - throw new Error( - 'Invalid consumer id. Consumer ids must contain only A-Z, a-z, 0-9, _ and $.', - ); - } - - const { table, schema } = toWatch; - const tableId = sql.table(`${schema}.${table}`); - const streamNameId = sql.id( - schema, - `${table}_CONSUMER_${consumerId}_STREAM`, - ); - - const streamReference = streamNameId.as( - 'stream', - ) as AliasedRawBuilder< - Selectable, - 'stream' - >; - - // If this is the first time seeing this consumer, we need to create the stream. - await sql` - CREATE STREAM IF NOT EXISTS - ${streamNameId} ON TABLE ${tableId};`.execute(snowflake); - - await snowflake - .transaction() - .setIsolationLevel('repeatable read') - .execute(async (trx) => { - let changes, - offset = 0; - while (changes === undefined || changes.length === batchSize) { - // some limit of kysely's types/TS' reasoning ability requires the cast below. - changes = await buildQuery( - trx.selectFrom(streamReference) as any, - ) - .limit(batchSize) - .offset(offset) - .execute(); - - offset += batchSize; - - // call the callback. Let it throw or resolve to decide whether the - // transaction will continue + ultimately be committed. - await cb(changes); - } - - // To advance the stream's offset (now that the callback returned - // successfully), Snowflake requires us to perform some DML operation that - // references the stream (even if it's a no-op on the stream). So, that's - // what we do below. This is strange, but explicitly documented, behavior. - // The table we pick for the fake insert (here, ALL_ORGS) is really arbitrary. - // NB: this is intentionally not type safe, since it's assuming that we're in - // our global Snowflake db, w/ access to public schema tables, even if the - // services (w/ their own schemas) don't know about those public tables. - await (trx as unknown as Transaction) - .insertInto(`PUBLIC.ALL_ORGS`) - .columns(['ID']) - .expression((builder) => - builder - .selectFrom(streamReference) - .select(sql.lit('ignored').as('dummy')) - .where(sql.raw('1 = 0')), - ) - .execute(); - }); - }, - ); - }, -); - -export type handleSnowflakeTableChanges = ReturnType< - typeof makeHandleSnowflakeTableChanges ->; diff --git a/server/snowflake/makeConnectionPool.ts b/server/snowflake/makeConnectionPool.ts deleted file mode 100644 index dfd20b5..0000000 --- a/server/snowflake/makeConnectionPool.ts +++ /dev/null @@ -1,94 +0,0 @@ -import genericPool from 'generic-pool'; -import { type Snowflake, requireSnowflake } from './snowflake-wrapper.js'; - -export type SnowflakeConnectionSettings = { - account: string; - username: string; - password: string; - database: string; - role: string; - schema: string; - warehouse: string; - arrayBindingThreshold: number; -}; - -// The subset of genericPool.options that we're commiting to supporting in -// makeSnowflakeConnectionPool. -export type SnowflakePoolOptions = { - max?: number; - min?: number; - testOnBorrow?: boolean; - testOnReturn?: boolean; - acquireTimeoutMillis?: number; - evictionRunIntervalMillis?: number; - numTestsPerEvictionRun?: number; - softIdleTimeoutMillis?: number; - idleTimeoutMillis?: number; - autostart?: boolean; -}; - -export default function makeSnowflakeConnectionPool( - connectionSettings: SnowflakeConnectionSettings, - poolSettings?: SnowflakePoolOptions, -) { - return genericPool.createPool( - { - create: async () => getConnection(connectionSettings), - destroy: async (connection) => connection.destroy(), - validate: async (connection) => - connection.execute('select 1').then( - () => true, - () => false, - ), - }, - { - max: 40, - min: 3, - testOnBorrow: true, - // We have a couple legit use cases where we kick off a bunch of Snowflake - // queries in quick succession, and where these queries are long-running. - // Since only `pool.max` of these queries can run at a time, they can end - // up getting queued to wait for a connection for a very long time without - // it necessarily meaning anything's wrong. So, we let the pool do that - // queueing with a _huge_ timeout, as that's much more robust (and elegant) - // than scattering queueing logic (e.g., `p-limit`) throughout the code. - acquireTimeoutMillis: 600_000, - - // Every minute, try to reclaim resources by removing some connections - // that have been idle for more than 10 minutes. My guess is that this is - // totally unnecessary, as I think the Snowflake queries are made using - // standard http requests, and the connections for those are probably - // automatically pooled by Nodejs' default agent. Still, we had this logic - // already, so might as well keep it. To prevent us from removing too many - // (and then having to recreate them), we only delete up to 4 connections - // per minute and use a setting (`softIdleTimeoutMillis`) that ensures - // that we're always keeping at least `min` connections in the pool. - evictionRunIntervalMillis: 60_000, - numTestsPerEvictionRun: 4, - softIdleTimeoutMillis: 600_000, - - // don't start creating connections until we start the pool explicitly (or - // we try to issue our first query). This is important when we're running - // tests, so we don't end up with unclosed connections. - autostart: false, - - // Allow users to customize the above. - ...poolSettings, - }, - ); -} - -export async function getConnection( - connectionSettings: SnowflakeConnectionSettings, -): Promise { - const SnowflakeClass = requireSnowflake(); - const snowflake = new SnowflakeClass(connectionSettings); - - await snowflake.connect().catch((e) => { - // eslint-disable-next-line no-console - console.error(e); - throw e; - }); - - return snowflake; -} diff --git a/server/snowflake/snowflake-wrapper.ts b/server/snowflake/snowflake-wrapper.ts deleted file mode 100644 index 647a7d6..0000000 --- a/server/snowflake/snowflake-wrapper.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Snowflake } from 'snowflake-promise'; - -export type { Snowflake }; - -let SnowflakePromise: typeof Snowflake | null = null; - -try { - const module = await import('snowflake-promise'); - - SnowflakePromise = module.Snowflake; -} catch (error) { - // Intentionally ignored: snowflake-promise is an optional dependency -} - -export function requireSnowflake(): typeof Snowflake { - if (!SnowflakePromise) { - throw new Error('snowflake-promise is required but not installed'); - } - return SnowflakePromise; -} diff --git a/server/snowflake/snowflake.ts b/server/snowflake/snowflake.ts deleted file mode 100644 index 16d47a3..0000000 --- a/server/snowflake/snowflake.ts +++ /dev/null @@ -1,264 +0,0 @@ -import DataLoader from 'dataloader'; -import { CompressionTypes } from 'kafkajs'; - -import { type KafkaSchemaMap } from '../iocContainer/index.js'; -import { inject } from '../iocContainer/utils.js'; -import { type Kafka, type KafkaProducer } from '../kafka/index.js'; -import { getFieldValueForRole } from '../services/itemProcessingService/index.js'; -import { type ManualReviewToolServiceSnowflakeSchema } from '../services/manualReviewToolService/index.js'; -import { type ReportingServiceSnowflakeSchema } from '../services/reportingService/index.js'; -import { jsonParse, jsonStringifyUnstable } from '../utils/encoding.js'; -import { assertUnreachable, sleep } from '../utils/misc.js'; -import type SafeTracer from '../utils/SafeTracer.js'; -import { type CollapseCases } from '../utils/typescript-types.js'; -import { - type BulkWriteTable, - type BulkWriteType, - type SnowflakePublicSchema, -} from './types.js'; - -/** - * Type for Snowflake query function - * Note: Services should use DataWarehouse from IOC container instead - */ -export type Snowflake = ( - query: string, - tracer: SafeTracer, - binds?: readonly unknown[], -) => Promise & { - start: () => void; - close: () => Promise; - transaction: ( - trx: (query: (query: string, binds?: unknown[]) => Promise) => Promise, - ) => Promise; -}; - -type BulkWrite = { - [K in BulkWriteTable]: { - table: K; - data: BulkWriteType< - (SnowflakePublicSchema & - ReportingServiceSnowflakeSchema & - ManualReviewToolServiceSnowflakeSchema)[K], - AcceptSlowQueries - >; - }; -}[BulkWriteTable]; - -type BulkWriteT< - T extends BulkWriteTable, - AcceptSlowQueries extends boolean, -> = BulkWrite & { table: T }; - -/** - * Factory for a service that'll write to snowflake _eventually_, after batching - * the writes (currently using kafka as the 'buffer'). - */ -function makeSnowflakeEventualWrite( - kafka: Kafka>, -) { - const kafkaProducer = kafka.producer(); - const initialConnectPromise = kafkaProducer.connect(); - const batchTimeout = 1000; - - // This is totally abusing data loader to write data in batches, whereas it's - // normally used for batched loading. But this should still work. - const loader: DataLoader, void> = new DataLoader( - async (data) => - bulkOutboxWrite(kafkaProducer, data).then(() => - new Array(data.length).fill(undefined), - ), - { - cache: false, - batch: true, - maxBatchSize: 200, - batchScheduleFn(cb) { - setTimeout(cb, batchTimeout); - }, - }, - ); - - async function snowflakeEventualWrite< - T extends BulkWriteTable, - AcceptSlowQueries extends boolean = false, - >( - tableName: BulkWriteT['table'], - rows: readonly BulkWriteT['data'][], - skipBatch: boolean = false, - ) { - await initialConnectPromise; - const dataToWrite = rows.map( - (data) => - ({ table: tableName, data }) satisfies CollapseCases< - BulkWriteT - > as BulkWriteT, - ); - - if (skipBatch) { - await bulkOutboxWrite(kafkaProducer, dataToWrite); - } else { - await loader.loadMany(dataToWrite); - } - } - - snowflakeEventualWrite.close = async () => { - // make sure the latest batch of writes has been flushed to kafka before we - // attempt to disconnect. This should be the last batch, assuming - // snowflakeEventualWrite isn't called again after `close()` is called. - // DataLoader doesn't have an API explicitly flushing this batch, which - // makes sense given that we're really abusing DataLoader for this purpose, - // so we just wait until the timer is up, with some buffer in case the event - // loop is blocked or something. - await sleep(batchTimeout + 1000); - await kafkaProducer.disconnect(); - }; - - return snowflakeEventualWrite; -} - -// We have to declare this separately from makeSnowflakeEventualWrite -// to avoid an annoying circular dependency issue. -const makeSnowflakeEventualWriteWithDeps = inject( - ['Kafka'], - makeSnowflakeEventualWrite, -); - -// But then we export it with the name snowflakeEventualWrite to match prior behavior. -export { makeSnowflakeEventualWriteWithDeps as makeSnowflakeEventualWrite }; - -async function bulkOutboxWrite( - kafka: KafkaProducer>, - data: readonly BulkWrite[], -) { - if (!data.length) { - return; - } - - const now = new Date(); - await kafka.send({ - topic: 'DATA_WAREHOUSE_INGEST_EVENTS', - compression: CompressionTypes.ZSTD, - messages: data.map((msg) => ({ - key: makeKafkaKey(msg), - value: { - dataJSON: jsonStringifyUnstable(msg.data), - recordedAt: now, - table: msg.table, - }, - })), - }); -} - -// This is the key that's used for partitioning. -// eslint-disable-next-line complexity -function makeKafkaKey( - msg: BulkWrite, -): SnowflakeOutboxKafkaMessageKey | undefined { - switch (msg.table) { - case 'ITEM_MODEL_SCORES_LOG': - case 'CONTENT_API_REQUESTS': - case 'RULE_EXECUTIONS': - case 'MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS': - return msg.data.item_creator_id - ? { orgId: msg.data.org_id, userId: msg.data.item_creator_id } - : undefined; - case 'ACTION_EXECUTIONS': - const userId = msg.data.item_submission_id - ? msg.data.item_creator_id - : msg.data.item_id; - return userId ? { orgId: msg.data.org_id, userId } : undefined; - case 'REPORTING_SERVICE.APPEALS': - switch (msg.data.actioned_item_type_kind) { - case 'USER': - return { orgId: msg.data.org_id, userId: msg.data.actioned_item_id }; - case 'CONTENT': - if ( - !('creatorId' in msg.data.actioned_item_type_schema_field_roles) - ) { - return undefined; - } - const userId = getFieldValueForRole( - msg.data.actioned_item_type_schema, - msg.data.actioned_item_type_schema_field_roles, - 'creatorId', - msg.data.actioned_item_data, - ); - return userId !== undefined - ? { orgId: msg.data.org_id, userId: userId.id } - : undefined; - case 'THREAD': - return undefined; - default: - assertUnreachable(msg.data.actioned_item_type_kind); - } - case 'REPORTING_SERVICE.REPORTS': - switch (msg.data.reported_item_type_kind) { - case 'USER': - return { orgId: msg.data.org_id, userId: msg.data.reported_item_id }; - case 'CONTENT': - if ( - !('creatorId' in msg.data.reported_item_type_schema_field_roles) - ) { - return undefined; - } - const userId = getFieldValueForRole( - msg.data.reported_item_type_schema, - msg.data.reported_item_type_schema_field_roles, - 'creatorId', - msg.data.reported_item_data, - ); - return userId !== undefined - ? { orgId: msg.data.org_id, userId: userId.id } - : undefined; - case 'THREAD': - return undefined; - default: - assertUnreachable(msg.data.reported_item_type_kind); - } - case 'REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS': - switch (msg.data.item_type_kind) { - case 'USER': - return { orgId: msg.data.org_id, userId: msg.data.item_id }; - case 'CONTENT': - if (!('creatorId' in msg.data.item_type_schema_field_roles)) { - return undefined; - } - const userId = getFieldValueForRole( - jsonParse(msg.data.item_type_schema), - msg.data.item_type_schema_field_roles, - 'creatorId', - jsonParse(msg.data.item_data), - ); - return userId !== undefined - ? { orgId: msg.data.org_id, userId: userId.id } - : undefined; - case 'THREAD': - return undefined; - default: - assertUnreachable(msg.data.item_type_kind); - } - default: - assertUnreachable(msg); - } -} - -export type SnowflakeEventualWrite = ReturnType< - typeof makeSnowflakeEventualWrite ->; - -// These types are used for the DATA_WAREHOUSE_INGEST_EVENTS Kafka topic -// They're defined here for Snowflake but could be reused by other warehouses -export type DataWarehouseOutboxKafkaMessageKey = { - orgId: string; - userId: string; -}; - -export type DataWarehouseOutboxKafkaMessageValue = { - dataJSON: string; - table: BulkWriteTable; - recordedAt: Date; -}; - -// Deprecated: Use DataWarehouse* types instead -export type SnowflakeOutboxKafkaMessageKey = DataWarehouseOutboxKafkaMessageKey; -export type SnowflakeOutboxKafkaMessageValue = DataWarehouseOutboxKafkaMessageValue; diff --git a/server/snowflake/types.ts b/server/snowflake/types.ts deleted file mode 100644 index 19aab97..0000000 --- a/server/snowflake/types.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { type ItemTypeKind } from '@roostorg/types'; -import { type ColumnType } from 'kysely'; -import { type ReadonlyDeep } from 'type-fest'; - -import { type RuleEnvironment } from '../rule_engine/RuleEngine.js'; -import { - type NormalizedItemData, - type RawItemData, - type SubmissionId, -} from '../services/itemProcessingService/index.js'; -import { type ManualReviewToolServiceSnowflakeSchema } from '../services/manualReviewToolService/index.js'; -import { - type ItemSchema, - type ItemTypeSchemaVariant, - type SchemaFieldRoles, -} from '../services/moderationConfigService/index.js'; -import { type ReportingServiceSnowflakeSchema } from '../services/reportingService/index.js'; -import { type JsonOf } from '../utils/encoding.js'; -import { getUtcDateOnlyString, type DateOnlyString } from '../utils/time.js'; -import { type NullableKeysOf } from '../utils/typescript-types.js'; -import { type ConditionSetWithResultAsLogged } from '../services/analyticsLoggers/index.js'; - -// We build our Snowflake queries (especially those that have dynamic portions, -// like conditionally-applied WHERE clauses) using `kysely`. So, here we define -// types for our snowflake tables that kysely needs in order to validate our -// queries and catch broken queries after a refactor. -// -// NB: these are only types for the snowflake tables in the _public_ schema, -// which are considered fair game for the whole app to access; the types for -// tables in other schemas are defined in the service that owns that schema. -// -// For each of these tables, we register it as `PUBLIC.TABLE_NAME` and just -// `TABLE_NAME`, so that we can query it with kysely with or w/o the reference -// to the schema (which doesn't need to be referenced explicitly because PUBLIC -// is the default schema, and the one we connect to snowflake with). -export type SnowflakePublicSchema = UnprefixedSnowflakePublicTables & { - [K in keyof UnprefixedSnowflakePublicTables as `PUBLIC.${K}`]: UnprefixedSnowflakePublicTables[K]; -}; - -/** - * The official Snowflake driver for Nodejs returns DATE and TIMESTAMP columns - * as special SfDate and SfTimestamp objects, which extend the JS Date object. - * This is necessary in part because timestamps in SQL can have higher precision - * than JS Date objects, which Snowflake wants clients to be able to access, and - * in part because Snowflake wants to override the default `toString` + `toJSON` - * methods on the returned values -- I think so they respect Snowflake's - * [`DATE_OUTPUT_FORMAT`](https://docs.snowflake.com/sql-reference/parameters#label-date-output-format) - * parameter. However, this override of `toJSON` means that it's really not safe - * to treat SfDates as standard Dates -- hello LSP violation! -- as there's - * unexpected results/breakage when a Snowflake-returned date/time is - * serialized. To help prevent that, we define this special SfDate type, which - * makes it impossible to call the unsafe `toJSON` method. For now, we don't - * expose the custom SfDate methods on this type, since we don't really want to - * depend on those (e.g., if we switch off Snowflake), and we don't need them - * for anything. We also define helper functions that can properly convert an - * SfDate to a standard Date object or to JSON (using the standard format of - * native Date objects). - */ -export type SfDate = Omit; - -/** - * Kysely allows using a different type for a column's value on SELECT, INSERT, - * and UPDATE queries. But, it does _not_ support defining a different type for - * column's value when that column is returned from a SELECT query vs when a - * value is provided to filter on that column in a WHERE clause. In the case of - * date columns, that creates a problem, because we often filter with a string - * (using a string containing just the date, to make sure that we don't get - * timezone-related issues), but then we get back an SfDate object. To - * accommodate this, Kysely requires us to indicate that the type for both WHERE - * and SELECT is something like `string | SfDate`. That's not ideal, though, as - * we could accidentally have a snowflake query result that's an SfDate, but - * pass it to a function that accepts string. So, we make that much less likely - * by also having an opaque type for the date strings that we use in our filters. - */ -export type FilterableSfDate = SfDate | DateOnlyString; - -/** - * This function converts the custom/augmented Date objects returned by the - * Snowflake driver into standard Date objects. See {@link SfDate}. - * - * In addition to accepting an SfDate, this function accepts a - * {@link DateOnlyString} for convenience, and it will be able to handle a - * `DateOnlyString`, but it should probably never be called with one, as this - * function only makes sense to call on Snowflake results. Accepting a - * DateOnlyString is really a pragmatic decision based on the same kysely - * limitation that led to the creation of {@link FilterableSfDate}. - * - * @param date The SfDate returned from the driver. - * @returns Date - */ -export function sfDateToDate(date: SfDate | DateOnlyString) { - return new Date(date as unknown as Date | string); -} - -/** - * See explanation at {@link SfDate}, {@link FilterableSfDate}, and - * {@link sfDateToDate}. - */ -export function sfDateToJson(it: SfDate | DateOnlyString) { - return typeof it === 'string' ? new Date(it).toISOString() : it.toISOString(); -} - -export function sfDateToDateOnlyString(it: SfDate | DateOnlyString) { - return typeof it === 'string' ? it : getUtcDateOnlyString(sfDateToDate(it)); -} - -type UnprefixedSnowflakePublicTables = { - ALL_ORGS: AllOrgsRow; - CONTENT_API_REQUESTS: ItemSubmissionsRow; - CONTENT_DETAILS_API_REQUESTS: ContentDetailsRequestsRow; - RULE_EXECUTIONS: RuleExecutionsRow; - RULE_EXECUTION_STATISTICS: RuleExecutionsStatisticsRow; - ACTION_EXECUTIONS: ActionExecutionsRow; - ITEM_MODEL_SCORES_LOG: ItemModelScoresRow; -}; - -export type AllOrgsRow = { - ID: ColumnType; - NAME: string; - EMAIL: string; - WEBSITE_URL: string; - DATE_CREATED: ColumnType; -}; - -/** - * Some tables cannot be written to directly (because they only gets populated - * in bulk by a periodic snowpipe job). The ingestion job that populates them - * may expect the data to be given in a slightly different shape than the way - * it's ultimately stored or needs to be queried. E.g., our snowpipe job expects - * keys to be lowercase in the provided json blobs, even though the - * corresponding column names are uppercase. To address this, `BulkWriteType` - * takes the type of a table and returns the type to use when writing to it w/ - * `snowflakeEventualWrite`. For now, I explicitly limit the generic to tables - * for which I've verified explicitly that this generates the write type. - * - * The use of NullableKeysOf is to allow a key that's nullable in Snowflake to - * be omitted in the JSON object (which shouldn't contain literal null values; - * see {@link SnowflakeFastData}). - */ -export type BulkWriteType< - T extends - | ItemSubmissionsRow - | ItemModelScoresRow - | RuleExecutionsRow - | ActionExecutionsRow - | ManualReviewToolServiceSnowflakeSchema[keyof ManualReviewToolServiceSnowflakeSchema] - | ReportingServiceSnowflakeSchema[keyof ReportingServiceSnowflakeSchema], - AcceptSlowQueries extends boolean, -> = UnsafeBulkWriteType & - (AcceptSlowQueries extends true ? unknown : SnowflakeFastData); - -export type UnsafeBulkWriteType< - T extends - | ItemSubmissionsRow - | ItemModelScoresRow - | RuleExecutionsRow - | ActionExecutionsRow - | ManualReviewToolServiceSnowflakeSchema[keyof ManualReviewToolServiceSnowflakeSchema] - | ReportingServiceSnowflakeSchema[keyof ReportingServiceSnowflakeSchema], -> = { - [K in Exclude< - keyof T & string, - NullableKeysOf - > as Lowercase]: T[K] extends ColumnType< - unknown, - infer InsertType, - unknown - > - ? InsertType - : T[K]; -} & { - [K in NullableKeysOf & string as Lowercase]?: T[K] extends ColumnType< - unknown, - infer InsertType, - unknown - > - ? InsertType - : T[K]; -}; - -export type BulkWriteTable = - | 'ACTION_EXECUTIONS' - | 'CONTENT_API_REQUESTS' - | 'REPORTING_SERVICE.REPORTS' - | 'REPORTING_SERVICE.APPEALS' - | 'RULE_EXECUTIONS' - | 'MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS' - | 'ITEM_MODEL_SCORES_LOG' - | 'REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS'; - -// Pretty much all the fields that are null below are nullable because they were -// added to the table after it was created, and not backfilled on existing rows. -export type ItemSubmissionsRow = { - ORG_ID: string; - REQUEST_ID: string; - SUBMISSION_ID: SubmissionId; - ITEM_ID: string; - ITEM_TYPE_NAME: string; - ITEM_TYPE_KIND: ItemTypeKind; - ITEM_TYPE_VERSION: string; - ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant; - ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles; - ITEM_TYPE_ID: string; - ITEM_TYPE_SCHEMA: JsonOf; - TS: ColumnType; - DS: ColumnType; -} & ( - | { - EVENT: 'REQUEST_SUCCEEDED'; - ITEM_DATA: JsonOf; - FAILURE_REASON: null; - } - | { - // Content can be unnormalized iff there was an error validating it. - // However, we also log normalized content if item validation succeeded - // but there was an error running the rules. - EVENT: 'REQUEST_FAILED'; - ITEM_DATA: JsonOf | JsonOf; - FAILURE_REASON: string; - } -) & - ( - | { - ITEM_CREATOR_ID: string; - ITEM_CREATOR_TYPE_ID: string; - } - | { - ITEM_CREATOR_ID: null; - ITEM_CREATOR_TYPE_ID: null; - } - ); - -export type ItemModelScoresRow = { - ORG_ID: string; - SUBMISSION_ID: SubmissionId; - ITEM_ID: string; - ITEM_TYPE_NAME: string; - ITEM_TYPE_KIND: ItemTypeKind; - ITEM_TYPE_VERSION: string; - ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant; - ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles; - ITEM_TYPE_ID: string; - ITEM_TYPE_SCHEMA: JsonOf; - TS: ColumnType; - DS: ColumnType; -} & ( - | { - EVENT: 'REQUEST_SUCCEEDED'; - ITEM_DATA: JsonOf; - FAILURE_REASON: null; - MODEL_ID: string; - MODEL_VERSION: number; - MODEL_SCORE?: number | null; - } - | { - // Content can be unnormalized iff there was an error validating it. - // However, we also log normalized content if item validation succeeded - // but there was an error running the rules. - EVENT: 'REQUEST_FAILED'; - ITEM_DATA: JsonOf | JsonOf; - FAILURE_REASON: string; - MODEL_ID: null; - MODEL_VERSION: null; - MODEL_SCORE: null; - } -) & - ( - | { - ITEM_CREATOR_ID: string; - ITEM_CREATOR_TYPE_ID: string; - } - | { - ITEM_CREATOR_ID: null; - ITEM_CREATOR_TYPE_ID: null; - } - ); - -type ContentDetailsRequestsRow = { - /* TODO. Define fields + migrate to make columns non-nullable as appropriate. */ -}; - -export type RuleExecutionsRow = { - RULE: string; // rule name - RULE_ID: string; - RULE_VERSION: string | null; // missing on old records - ORG_ID: string; - ENVIRONMENT: RuleEnvironment; - CORRELATION_ID: string | null; // missing on old records - - // NB: these array columns are never null (right now), but can't be marked - // non-nullable in snowflake because of a snowflake bug. - // https://community.snowflake.com/s/question/0D53r0000BgPBAKCQ4/cannot-add-not-null-to-a-column-even-though-it-has-no-null-values-whats-up - POLICY_IDS: readonly string[]; - POLICY_NAMES: readonly string[]; - TAGS: readonly string[]; - - RESULT: JsonOf | null; // missing on old records - PASSED: boolean; - TS: ColumnType; - DS: ColumnType; - - ITEM_ID: string; - ITEM_TYPE_ID: string; - ITEM_TYPE_KIND: ItemTypeKind; - ITEM_TYPE_SCHEMA: JsonOf | null; - ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles | null; - ITEM_TYPE_VERSION: string | null; - ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant | null; -} & ( - | { - ITEM_DATA: JsonOf; - ITEM_SUBMISSION_ID: SubmissionId; - ITEM_TYPE_NAME: string; - ITEM_CREATOR_ID: string | null; - ITEM_CREATOR_TYPE_ID: string | null; - } - | { - // These are the types in the "item identifier as rule input" case - // (currently only applies in user rules). - ITEM_DATA: null; - ITEM_SUBMISSION_ID: null; - ITEM_TYPE_NAME: null; - ITEM_CREATOR_ID: null; - ITEM_CREATOR_TYPE_ID: null; - } -); - -export type ActionExecutionPolicy = { - id: string; - name: string; - userStrikeCount: number; - // TODO: remove - penalty?: string; -}; - -// Represent a rule that passed (in the rule set that triggered this action), -// and that was associated with this action (i.e., its passing contributed to -// the action being triggered). This type is intentionally more limited than the -// Rule + Policy models, to enforce that this service doesn't depend on model -// instance functionality (e.g., saving instances, fetching associations). -export type ActionExecutionMatchingRule = { - id: string; - name: string; - version: string; - // NB: matchingRule.tags is now required, but it wasn't always, so it's - // missing in snowflake for some legacy rows. Those row's have had the - // rule_tags column backfilled on them; just not the tags _for each - // individual rule. If we ever need to fill in this data, use the following - // migration as a starting point: 2022.06.09T06.30.20.backfill-action-execution-tags.cjs - tags?: string[]; - policies: ActionExecutionPolicy[]; -}; - -type ActionExecutionsRow = { - ORG_ID: string; - ACTION_ID: string; - ACTION_NAME: string; - ITEM_CREATOR_ID: string | null; - ITEM_CREATOR_TYPE_ID: string | null; - - // Actions can be taken directly on a user (via user rules or through the UI), - // in which case we _currently_ treat the "item" as null and just fill in - // USER_ID. So, in that case `item_submission_id` and `item_type_id` will be - // null. `ITEM_TYPE_ID` will _also_ be null in rows that were created before - // we added the `CONTENT_TYPE_ID` column (which was the original name of - // `ITEM_TYPE_ID`). Therefore, YOU CANNOT FILTER BY NULL ITEM_TYPE_ID VALUES - // TO GET ONLY ACTIONS TAKEN ON USERS. - ITEM_TYPE_ID: string | null; - ITEM_SUBMISSION_ID: SubmissionId | null; - ITEM_ID: string | null; - ITEM_TYPE_KIND: string; - - // similarly, actions can be triggered directly, without going through a rule. - RULES: ReadonlyDeep | null; - RULE_TAGS: string[] | null; - RULE_ENVIRONMENT: RuleEnvironment | null; - CORRELATION_ID: string; - ACTION_SOURCE: string; - ACTOR_ID: string | null; - POLICIES: ReadonlyDeep; - FAILED: boolean; - JOB_ID: string | null; - TS: ColumnType; - DS: ColumnType; -}; - -type RuleExecutionsStatisticsRow = { - ORG_ID: string; - RULE_ID: string; - RULE_VERSION: SfDate; - NUM_PASSES: number; - NUM_RUNS: number; - TS_START_INCLUSIVE: SfDate; - TS_END_EXCLUSIVE: SfDate; - ENVIRONMENT: string | null; - RULE_POLICY_NAMES: string[] | null; - RULE_POLICY_IDS: string[] | null; - RULE_TAGS: string[] | null; -}; - -/** - * Our storage strategy in Snowflake requires that the data objects we first - * send to ingested_json, and any non-primitive values in that data, don't - * include include the JSON value `null`. - * - * The reasoning for this goes back to a distinction between SQL's NULL and - * JSON's null. Essentially, NULL in SQL means: 'this value is missing or - * unknown; its true value (if known) could be anything'. The closest analogue - * to SQL NULL in JSON would just be excluding the key altogether from the JSON - * object. However, in JSON, you can _also_ include the key, but with a `null` - * value. The interpretation of that is application-specific, but it often means - * a more-affirmative assertion of "there is no value for this thing", rather - * than "the value is unknown". Oftentimes, programmers are sloppy about this - * distinction, and that's fine; it usually doesn't matter. However, in - * Snowflake, it does. The story is that: - * - * 1. We're storing the submitted JSON data, and usually objects w/i this data, - * in `variant` columns; - * - * 2. Snowflake automatically makes a best effort to store _each sub-value_ in a - * variant in a way that's similar to how it would store a dedicated column - * holding that sub value. E.g., if your table has a variant column `data`, - * where all the values loook like `{ "x": "some_string" }`, Snowflake will - * actually store that in a way so that queries that reference `data:x` are - * ~just as fast as if you'd put the `"x"` values in a dedicated column. It - * calls this "columnarization". See https://docs.snowflake.com/en/user-guide/semistructured-considerations.html#semi-structured-data-files-and-columnarization - * Cf. https://docs.snowflake.com/en/sql-reference/data-types-semistructured.html#using-values-in-a-variant - * - * 3. As part of the columnarization process, it has to pick a data type for the - * "column" that it generates. In the example above, the "column" for the "x" - * values would have a string type, and that column would be NULLable, in the - * SQl sense, to handle the case of a variant value being added that doesn't - * have an "x" key at all. - * - * 4. However, if the values in the "x" key of the variant data could be a - * string _or JSON's null_, then there's no simple SQL column type that can - * represent this (i.e., can store NULL, or JSON null, or varchar). So, - * Snowflake just gives up on columnarization in this case, and the queries - * get a lot slower. - * - * For us, we don't really have any use cases (so far) for giving JSON null a - * different meaning than just leaving the key out of the JSON object sent to - * Snowflake (and having Snowflake use SQL NULL). So, this type enforces a - * "no json nulls" rule to make sure that we can't accidentally fall off this - * performance cliff. - */ -type SnowflakeFastData = { - [x: string]: JSONStringifyableWithoutNull | undefined; -}; - -type JSONStringifyableWithoutNull = - // We can allow object keys to have undefined as their value, - // as such keys will simply be omitted by JSON.stringify. However, - // we can't allow undefined in arrays, as that gets serialized as null. - | { readonly [key: string]: JSONStringifyableWithoutNull | undefined } - | readonly [JSONStringifyableWithoutNull, ...JSONStringifyableWithoutNull[]] - | readonly JSONStringifyableWithoutNull[] - | number - | string - | boolean; diff --git a/server/storage/dataWarehouse/DataWarehouseFactory.ts b/server/storage/dataWarehouse/DataWarehouseFactory.ts index 4c67c02..b46322f 100644 --- a/server/storage/dataWarehouse/DataWarehouseFactory.ts +++ b/server/storage/dataWarehouse/DataWarehouseFactory.ts @@ -3,10 +3,6 @@ */ /* eslint-disable max-classes-per-file */ -import { - SnowflakeKyselyAdapter, - type SnowflakeConnectionSettings, -} from './SnowflakeAdapter.js'; import { ClickhouseKyselyAdapter, type ClickhouseConnectionSettings, @@ -27,13 +23,11 @@ import type { } from './IDataWarehouseAnalytics.js'; import { PostgresAnalyticsAdapter } from './PostgresAnalyticsAdapter.js'; import { - SnowflakeWarehouseAdapter, ClickhouseWarehouseAdapter, NoOpWarehouseAdapter, type IWarehouseAdapter, } from '../../plugins/warehouse/index.js'; import { - SnowflakeAnalyticsAdapter as SnowflakeAnalyticsPlugin, ClickhouseAnalyticsAdapter as ClickhouseAnalyticsPlugin, NoOpAnalyticsAdapter, type IAnalyticsAdapter, @@ -47,13 +41,11 @@ import type SafeTracer from '../../utils/SafeTracer.js'; * Extend this type to add new warehouse implementations */ export type DataWarehouseProvider = - | 'snowflake' | 'clickhouse' | 'postgresql' | 'noop'; export type AnalyticsProvider = - | 'snowflake' | 'clickhouse' | 'postgresql' | 'noop'; @@ -62,13 +54,6 @@ export type AnalyticsProvider = export type { IDataWarehouseProvider }; export type DataWarehouseConfig = - | { - provider: 'snowflake'; - connection: SnowflakeConnectionSettings; - pool?: DataWarehousePoolSettings; - kafka?: any; // For Snowflake analytics - analyticsProvider?: AnalyticsProvider; - } | { provider: 'clickhouse'; connection: ClickhouseConnectionSettings; @@ -209,14 +194,6 @@ export class DataWarehouseFactory { */ static createDataWarehouse(config: DataWarehouseConfig): IDataWarehouse { switch (config.provider) { - case 'snowflake': - return new WarehouseAdapterBridge( - 'snowflake', - new SnowflakeWarehouseAdapter({ - connection: config.connection, - pool: config.pool, - }), - ); case 'noop': return new WarehouseAdapterBridge( 'noop', @@ -230,8 +207,7 @@ export class DataWarehouseFactory { }), ); case 'postgresql': - // postgresql uses the same warehouse adapter as noop for now - return new WarehouseAdapterBridge('noop', new NoOpWarehouseAdapter()); + return new WarehouseAdapterBridge('postgresql', new NoOpWarehouseAdapter()); default: return assertUnreachable( config, @@ -247,8 +223,6 @@ export class DataWarehouseFactory { config: DataWarehouseConfig, ): IDataWarehouseDialect { switch (config.provider) { - case 'snowflake': - return new SnowflakeKyselyAdapter(config.connection, config.pool); case 'clickhouse': return new ClickhouseKyselyAdapter(config.connection, config.pool); case 'postgresql': @@ -272,32 +246,9 @@ export class DataWarehouseFactory { dialect?: IDataWarehouseDialect, ): IDataWarehouseAnalytics { const analyticsProvider = - config.provider === 'snowflake' - ? (config.analyticsProvider ?? 'snowflake') - : config.analyticsProvider ?? (config.provider as AnalyticsProvider); - - const kafkaClient = - 'kafka' in config ? config.kafka : undefined; + config.analyticsProvider ?? (config.provider as AnalyticsProvider); switch (analyticsProvider) { - case 'snowflake': - if (config.provider !== 'snowflake') { - throw new Error( - 'Snowflake analytics provider requires the snowflake warehouse configuration.', - ); - } - const kyselyInstance = dialect?.getKyselyInstance(); - if (!kyselyInstance) { - throw new Error('Snowflake analytics requires Kysely instance'); - } - return new AnalyticsAdapterBridge( - 'snowflake', - new SnowflakeAnalyticsPlugin(kyselyInstance, { - kafka: kafkaClient, - batchSize: 200, - batchTimeout: 1_000, - }), - ); case 'noop': return new AnalyticsAdapterBridge('noop', new NoOpAnalyticsAdapter()); case 'clickhouse': @@ -339,27 +290,6 @@ export class DataWarehouseFactory { provider) as AnalyticsProvider; switch (provider) { - case 'snowflake': - return { - provider: 'snowflake', - analyticsProvider, - connection: { - account: process.env.SNOWFLAKE_ACCOUNT ?? 'vya40538', - username: String(process.env.SNOWFLAKE_USERNAME), - password: process.env.SNOWFLAKE_PASSWORD!, - database: process.env.SNOWFLAKE_DB_NAME!, - role: process.env.SNOWFLAKE_ROLE ?? 'ACCOUNTADMIN', - schema: process.env.SNOWFLAKE_SCHEMA ?? 'PUBLIC', - warehouse: - process.env.SNOWFLAKE_WAREHOUSE ?? 'RULE_LOGS', - arrayBindingThreshold: Number.MAX_VALUE, - }, - pool: { - ...(process.env.SNOWFLAKE_POOL_SIZE - ? { max: parseInt(process.env.SNOWFLAKE_POOL_SIZE) } - : {}), - }, - }; case 'noop': return { provider: 'noop', diff --git a/server/storage/dataWarehouse/IDataWarehouse.ts b/server/storage/dataWarehouse/IDataWarehouse.ts index 4a4efa0..4c316e2 100644 --- a/server/storage/dataWarehouse/IDataWarehouse.ts +++ b/server/storage/dataWarehouse/IDataWarehouse.ts @@ -1,7 +1,7 @@ /** * Interface for Data Warehouse operations. * Provides abstraction over different data warehouse implementations - * (Snowflake, Clickhouse, PostgreSQL, BigQuery, Redshift, etc.) + * (Clickhouse, PostgreSQL, BigQuery, Redshift, etc.) */ import { type Kysely } from 'kysely'; @@ -11,10 +11,12 @@ import type SafeTracer from '../../utils/SafeTracer.js'; * Supported data warehouse providers * Integrators can add their own warehouse types here */ -export type DataWarehouseProvider = 'snowflake' | 'clickhouse' | 'postgresql' | string; +export type DataWarehouseProvider = 'clickhouse' | 'postgresql' | string; /** - * Connection settings that are common across data warehouse implementations + * Connection settings that are common across data warehouse implementations. + * All fields besides username/password/database are optional so that + * different warehouse backends can use whichever subset applies to them. */ export interface DataWarehouseConnectionSettings { host?: string; diff --git a/server/storage/dataWarehouse/IDataWarehouseAnalytics.ts b/server/storage/dataWarehouse/IDataWarehouseAnalytics.ts index c033b0d..340f3f3 100644 --- a/server/storage/dataWarehouse/IDataWarehouseAnalytics.ts +++ b/server/storage/dataWarehouse/IDataWarehouseAnalytics.ts @@ -172,8 +172,8 @@ export interface IDataWarehouseAnalytics { /** * Create a CDC stream/listener on a table - * Implementations use their warehouse's CDC mechanism (Snowflake Streams, - * Clickhouse materialized views, PostgreSQL logical replication, etc.) + * Implementations use their warehouse's CDC mechanism (Clickhouse materialized + * views, PostgreSQL logical replication, etc.) */ createCDCStream( config: CDCConfig, @@ -269,16 +269,5 @@ CREATE TABLE rule_executions ( ) ENGINE = MergeTree() PARTITION BY ds ORDER BY (ds, ts, org_id); - --- Example for Snowflake: -CREATE TABLE rule_executions ( - ds DATE NOT NULL, - ts NUMBER NOT NULL, - org_id VARCHAR NOT NULL, - item_id VARCHAR NOT NULL, - rule_id VARCHAR NOT NULL, - passed BOOLEAN NOT NULL, - -- ... other fields -) PARTITION BY (ds); `; diff --git a/server/storage/dataWarehouse/PostgresAnalyticsAdapter.ts b/server/storage/dataWarehouse/PostgresAnalyticsAdapter.ts index e734dae..74dce5a 100644 --- a/server/storage/dataWarehouse/PostgresAnalyticsAdapter.ts +++ b/server/storage/dataWarehouse/PostgresAnalyticsAdapter.ts @@ -7,7 +7,7 @@ * - Use Kysely with PostgreSQL dialect * - Use COPY for bulk inserts * - Use logical replication for CDC (Debezium/pglogical) - * - See SnowflakeAnalyticsAdapter.ts for reference + * - See ClickhouseAnalyticsAdapter for a concrete analytics adapter reference * - See ../README.md for implementation guide */ diff --git a/server/storage/dataWarehouse/SnowflakeAdapter.ts b/server/storage/dataWarehouse/SnowflakeAdapter.ts deleted file mode 100644 index 82a075c..0000000 --- a/server/storage/dataWarehouse/SnowflakeAdapter.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Snowflake Kysely dialect and shared connection settings. - * The runtime warehouse logic now lives under server/plugins/warehouse/. - */ - -import { Kysely } from 'kysely'; -import { SnowflakeDialect } from '../../snowflake/KyselyDialect.js'; -import { - type IDataWarehouseDialect, - type DataWarehouseConnectionSettings, - type DataWarehousePoolSettings, -} from './IDataWarehouse.js'; - -/** - * Snowflake-specific connection settings - */ -export interface SnowflakeConnectionSettings - extends DataWarehouseConnectionSettings { - account: string; - warehouse: string; - arrayBindingThreshold?: number; -} - -/** Snowflake Kysely dialect adapter */ -export class SnowflakeKyselyAdapter implements IDataWarehouseDialect { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private readonly kysely: Kysely; - - constructor( - connectionSettings: SnowflakeConnectionSettings, - poolSettings?: DataWarehousePoolSettings, - ) { - this.kysely = new Kysely({ - dialect: new SnowflakeDialect({ - connection: { - account: connectionSettings.account, - username: connectionSettings.username, - password: connectionSettings.password, - database: connectionSettings.database, - role: connectionSettings.role ?? 'ACCOUNTADMIN', - schema: connectionSettings.schema ?? 'PUBLIC', - warehouse: connectionSettings.warehouse, - arrayBindingThreshold: - connectionSettings.arrayBindingThreshold ?? Number.MAX_VALUE, - }, - pool: poolSettings, - }), - }); - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getKyselyInstance(): Kysely { - return this.kysely; - } - - async destroy(): Promise { - await this.kysely.destroy(); - } -} - diff --git a/server/storage/dataWarehouse/SnowflakeAnalyticsAdapter.ts b/server/storage/dataWarehouse/SnowflakeAnalyticsAdapter.ts deleted file mode 100644 index a703dd5..0000000 --- a/server/storage/dataWarehouse/SnowflakeAnalyticsAdapter.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - SnowflakeAnalyticsAdapter, - type SnowflakeAnalyticsAdapterOptions, -} from '../../plugins/analytics/adapters/SnowflakeAnalyticsAdapter.js'; - diff --git a/server/storage/dataWarehouse/index.ts b/server/storage/dataWarehouse/index.ts index c96173a..45831bf 100644 --- a/server/storage/dataWarehouse/index.ts +++ b/server/storage/dataWarehouse/index.ts @@ -1,8 +1,8 @@ /** * Data Warehouse Storage Abstraction - * + * * This module provides an abstraction layer for data warehouse operations, - * allowing easy switching between different providers (Snowflake, Clickhouse, etc.) + * allowing easy switching between different providers (Clickhouse, etc.) */ export { @@ -13,11 +13,6 @@ export { type TransactionFunction, } from './IDataWarehouse.js'; -export { - SnowflakeKyselyAdapter, - type SnowflakeConnectionSettings, -} from './SnowflakeAdapter.js'; - export { ClickhouseKyselyAdapter, type ClickhouseConnectionSettings, diff --git a/server/storage/dataWarehouse/warehouseDateTypes.ts b/server/storage/dataWarehouse/warehouseDateTypes.ts new file mode 100644 index 0000000..49d6b84 --- /dev/null +++ b/server/storage/dataWarehouse/warehouseDateTypes.ts @@ -0,0 +1,7 @@ +import { type DateOnlyString } from '../../utils/time.js'; + +/** Warehouse driver date (opaque `Date` for Kysely columns). */ +export type WarehouseDate = Omit; + +/** Date column value or date-only string for filters. */ +export type FilterableWarehouseDate = WarehouseDate | DateOnlyString; diff --git a/server/storage/dataWarehouse/warehouseSchema.ts b/server/storage/dataWarehouse/warehouseSchema.ts new file mode 100644 index 0000000..f4eb57a --- /dev/null +++ b/server/storage/dataWarehouse/warehouseSchema.ts @@ -0,0 +1,331 @@ +/** + * Data Warehouse Schema Types + * + * Defines Kysely-compatible types for data warehouse tables. + * These types are used by query adapters and services to build + * type-safe queries against the data warehouse. + */ +import { type ItemTypeKind } from '@roostorg/types'; +import { type ColumnType } from 'kysely'; +import { type ReadonlyDeep } from 'type-fest'; + +import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js'; +import { + type NormalizedItemData, + type RawItemData, + type SubmissionId, +} from '../../services/itemProcessingService/index.js'; +import { type ManualReviewToolServiceWarehouseSchema } from '../../services/manualReviewToolService/index.js'; +import { + type ItemSchema, + type ItemTypeSchemaVariant, + type SchemaFieldRoles, +} from '../../services/moderationConfigService/index.js'; +import { type ReportingServiceWarehouseSchema } from '../../services/reportingService/index.js'; +import { type JsonOf } from '../../utils/encoding.js'; +import { getUtcDateOnlyString, type DateOnlyString } from '../../utils/time.js'; +import { type NullableKeysOf } from '../../utils/typescript-types.js'; +import { type ConditionSetWithResultAsLogged } from '../../services/analyticsLoggers/index.js'; + +import { + type FilterableWarehouseDate, + type WarehouseDate, +} from './warehouseDateTypes.js'; + +export type { + FilterableWarehouseDate, + WarehouseDate, +} from './warehouseDateTypes.js'; + +// Kysely types for data warehouse tables in the public schema. +// These are considered fair game for the whole app to access; types for +// tables in other schemas are defined by the service that owns that schema. +// +// Each table is registered both as `PUBLIC.TABLE_NAME` and just `TABLE_NAME`, +// so queries can reference it with or without the schema prefix. +export type DataWarehousePublicSchema = UnprefixedPublicTables & { + [K in keyof UnprefixedPublicTables as `PUBLIC.${K}`]: UnprefixedPublicTables[K]; +}; + +/** Convert a warehouse driver date to a standard Date object. */ +export function warehouseDateToDate(date: WarehouseDate | DateOnlyString) { + return new Date(date as unknown as Date | string); +} + +/** Convert a warehouse driver date to an ISO JSON string. */ +export function warehouseDateToJson(it: WarehouseDate | DateOnlyString) { + return typeof it === 'string' ? new Date(it).toISOString() : it.toISOString(); +} + +export function warehouseDateToDateOnlyString(it: WarehouseDate | DateOnlyString) { + return typeof it === 'string' ? it : getUtcDateOnlyString(warehouseDateToDate(it)); +} + +type UnprefixedPublicTables = { + ALL_ORGS: AllOrgsRow; + CONTENT_API_REQUESTS: ItemSubmissionsRow; + CONTENT_DETAILS_API_REQUESTS: ContentDetailsRequestsRow; + RULE_EXECUTIONS: RuleExecutionsRow; + RULE_EXECUTION_STATISTICS: RuleExecutionsStatisticsRow; + ACTION_EXECUTIONS: ActionExecutionsRow; + ITEM_MODEL_SCORES_LOG: ItemModelScoresRow; +}; + +export type AllOrgsRow = { + ID: ColumnType; + NAME: string; + EMAIL: string; + WEBSITE_URL: string; + DATE_CREATED: ColumnType; +}; + +/** + * Transforms a table row type into the shape expected for bulk/eventual writes + * (e.g. via Kafka ingestion). Keys are lowercased and nullable keys become + * optional. The `AcceptSlowQueries` flag controls whether JSON null values are + * permitted (they can degrade columnar storage performance). + */ +export type BulkWriteType< + T extends + | ItemSubmissionsRow + | ItemModelScoresRow + | RuleExecutionsRow + | ActionExecutionsRow + | ManualReviewToolServiceWarehouseSchema[keyof ManualReviewToolServiceWarehouseSchema] + | ReportingServiceWarehouseSchema[keyof ReportingServiceWarehouseSchema], + AcceptSlowQueries extends boolean, +> = UnsafeBulkWriteType & + (AcceptSlowQueries extends true ? unknown : WarehouseFastData); + +export type UnsafeBulkWriteType< + T extends + | ItemSubmissionsRow + | ItemModelScoresRow + | RuleExecutionsRow + | ActionExecutionsRow + | ManualReviewToolServiceWarehouseSchema[keyof ManualReviewToolServiceWarehouseSchema] + | ReportingServiceWarehouseSchema[keyof ReportingServiceWarehouseSchema], +> = { + [K in Exclude< + keyof T & string, + NullableKeysOf + > as Lowercase]: T[K] extends ColumnType< + unknown, + infer InsertType, + unknown + > + ? InsertType + : T[K]; +} & { + [K in NullableKeysOf & string as Lowercase]?: T[K] extends ColumnType< + unknown, + infer InsertType, + unknown + > + ? InsertType + : T[K]; +}; + +export type BulkWriteTable = + | 'ACTION_EXECUTIONS' + | 'CONTENT_API_REQUESTS' + | 'REPORTING_SERVICE.REPORTS' + | 'REPORTING_SERVICE.APPEALS' + | 'RULE_EXECUTIONS' + | 'MANUAL_REVIEW_TOOL.ROUTING_RULE_EXECUTIONS' + | 'ITEM_MODEL_SCORES_LOG' + | 'REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS'; + +export type ItemSubmissionsRow = { + ORG_ID: string; + REQUEST_ID: string; + SUBMISSION_ID: SubmissionId; + ITEM_ID: string; + ITEM_TYPE_NAME: string; + ITEM_TYPE_KIND: ItemTypeKind; + ITEM_TYPE_VERSION: string; + ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant; + ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles; + ITEM_TYPE_ID: string; + ITEM_TYPE_SCHEMA: JsonOf; + TS: ColumnType; + DS: ColumnType; +} & ( + | { + EVENT: 'REQUEST_SUCCEEDED'; + ITEM_DATA: JsonOf; + FAILURE_REASON: null; + } + | { + EVENT: 'REQUEST_FAILED'; + ITEM_DATA: JsonOf | JsonOf; + FAILURE_REASON: string; + } +) & + ( + | { + ITEM_CREATOR_ID: string; + ITEM_CREATOR_TYPE_ID: string; + } + | { + ITEM_CREATOR_ID: null; + ITEM_CREATOR_TYPE_ID: null; + } + ); + +export type ItemModelScoresRow = { + ORG_ID: string; + SUBMISSION_ID: SubmissionId; + ITEM_ID: string; + ITEM_TYPE_NAME: string; + ITEM_TYPE_KIND: ItemTypeKind; + ITEM_TYPE_VERSION: string; + ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant; + ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles; + ITEM_TYPE_ID: string; + ITEM_TYPE_SCHEMA: JsonOf; + TS: ColumnType; + DS: ColumnType; +} & ( + | { + EVENT: 'REQUEST_SUCCEEDED'; + ITEM_DATA: JsonOf; + FAILURE_REASON: null; + MODEL_ID: string; + MODEL_VERSION: number; + MODEL_SCORE?: number | null; + } + | { + EVENT: 'REQUEST_FAILED'; + ITEM_DATA: JsonOf | JsonOf; + FAILURE_REASON: string; + MODEL_ID: null; + MODEL_VERSION: null; + MODEL_SCORE: null; + } +) & + ( + | { + ITEM_CREATOR_ID: string; + ITEM_CREATOR_TYPE_ID: string; + } + | { + ITEM_CREATOR_ID: null; + ITEM_CREATOR_TYPE_ID: null; + } + ); + +type ContentDetailsRequestsRow = { + /* TODO. Define fields + migrate to make columns non-nullable as appropriate. */ +}; + +export type RuleExecutionsRow = { + RULE: string; + RULE_ID: string; + RULE_VERSION: string | null; + ORG_ID: string; + ENVIRONMENT: RuleEnvironment; + CORRELATION_ID: string | null; + + POLICY_IDS: readonly string[]; + POLICY_NAMES: readonly string[]; + TAGS: readonly string[]; + + RESULT: JsonOf | null; + PASSED: boolean; + TS: ColumnType; + DS: ColumnType; + + ITEM_ID: string; + ITEM_TYPE_ID: string; + ITEM_TYPE_KIND: ItemTypeKind; + ITEM_TYPE_SCHEMA: JsonOf | null; + ITEM_TYPE_SCHEMA_FIELD_ROLES: SchemaFieldRoles | null; + ITEM_TYPE_VERSION: string | null; + ITEM_TYPE_SCHEMA_VARIANT: ItemTypeSchemaVariant | null; +} & ( + | { + ITEM_DATA: JsonOf; + ITEM_SUBMISSION_ID: SubmissionId; + ITEM_TYPE_NAME: string; + ITEM_CREATOR_ID: string | null; + ITEM_CREATOR_TYPE_ID: string | null; + } + | { + ITEM_DATA: null; + ITEM_SUBMISSION_ID: null; + ITEM_TYPE_NAME: null; + ITEM_CREATOR_ID: null; + ITEM_CREATOR_TYPE_ID: null; + } +); + +export type ActionExecutionPolicy = { + id: string; + name: string; + userStrikeCount: number; + penalty?: string; +}; + +export type ActionExecutionMatchingRule = { + id: string; + name: string; + version: string; + tags?: string[]; + policies: ActionExecutionPolicy[]; +}; + +type ActionExecutionsRow = { + ORG_ID: string; + ACTION_ID: string; + ACTION_NAME: string; + ITEM_CREATOR_ID: string | null; + ITEM_CREATOR_TYPE_ID: string | null; + ITEM_TYPE_ID: string | null; + ITEM_SUBMISSION_ID: SubmissionId | null; + ITEM_ID: string | null; + ITEM_TYPE_KIND: string; + RULES: ReadonlyDeep | null; + RULE_TAGS: string[] | null; + RULE_ENVIRONMENT: RuleEnvironment | null; + CORRELATION_ID: string; + ACTION_SOURCE: string; + ACTOR_ID: string | null; + POLICIES: ReadonlyDeep; + FAILED: boolean; + JOB_ID: string | null; + TS: ColumnType; + DS: ColumnType; +}; + +type RuleExecutionsStatisticsRow = { + ORG_ID: string; + RULE_ID: string; + RULE_VERSION: WarehouseDate; + NUM_PASSES: number; + NUM_RUNS: number; + TS_START_INCLUSIVE: WarehouseDate; + TS_END_EXCLUSIVE: WarehouseDate; + ENVIRONMENT: string | null; + RULE_POLICY_NAMES: string[] | null; + RULE_POLICY_IDS: string[] | null; + RULE_TAGS: string[] | null; +}; + +/** + * Enforces that data objects written to the warehouse do not contain JSON + * null values. Excluding nulls keeps columnar storage performance optimal + * by avoiding mixed-type columns. Keys with undefined values are fine as + * they are omitted during serialization. + */ +type WarehouseFastData = { + [x: string]: JSONStringifyableWithoutNull | undefined; +}; + +type JSONStringifyableWithoutNull = + | { readonly [key: string]: JSONStringifyableWithoutNull | undefined } + | readonly [JSONStringifyableWithoutNull, ...JSONStringifyableWithoutNull[]] + | readonly JSONStringifyableWithoutNull[] + | number + | string + | boolean; diff --git a/server/storage/index.ts b/server/storage/index.ts index 62d77f3..2458432 100644 --- a/server/storage/index.ts +++ b/server/storage/index.ts @@ -1,7 +1,7 @@ /** * Data Warehouse Abstraction Layer * - * Provides abstraction for data warehouses: Snowflake, Clickhouse, PostgreSQL, etc. + * Provides abstraction for data warehouses: Clickhouse, PostgreSQL, etc. * Switch warehouses by setting WAREHOUSE_ADAPTER */ diff --git a/server/test/setupMockedServer.ts b/server/test/setupMockedServer.ts index bee16f9..e4b6d29 100644 --- a/server/test/setupMockedServer.ts +++ b/server/test/setupMockedServer.ts @@ -58,7 +58,7 @@ export async function getBottleContainerWithIOMocks() { const startMock = jest.fn(() => {}) as IDataWarehouse['start']; const closeMock = jest.fn(async () => {}) as IDataWarehouse['close']; - const getProviderMock = jest.fn(() => 'snowflake') as IDataWarehouse['getProvider']; + const getProviderMock = jest.fn(() => 'clickhouse') as IDataWarehouse['getProvider']; const dataWarehouseMock: IDataWarehouse = { query: queryMock, @@ -83,13 +83,11 @@ export async function getBottleContainerWithIOMocks() { 'DataWarehouseAnalytics', analyticsMock, ); - bottle.value('Snowflake', dataWarehouseMock); bottle.value('Tracer', tracer); return bottle.container as unknown as Omit< Dependencies, - 'Snowflake' | 'DataWarehouse' | 'DataWarehouseAnalytics' + 'DataWarehouse' | 'DataWarehouseAnalytics' > & { - Snowflake: typeof dataWarehouseMock; DataWarehouse: typeof dataWarehouseMock; DataWarehouseAnalytics: typeof analyticsMock; }; diff --git a/server/test/stubs/makeMockWarehouseKyselyDialect.ts b/server/test/stubs/makeMockWarehouseKyselyDialect.ts new file mode 100644 index 0000000..20fd2e2 --- /dev/null +++ b/server/test/stubs/makeMockWarehouseKyselyDialect.ts @@ -0,0 +1,133 @@ +/* eslint-disable max-classes-per-file */ +/** + * Test-only Kysely dialect that compiles SQL with `:1` placeholders and + * double-quoted identifiers (matching the style used by the data warehouse) + * without requiring a real database connection. + */ +import { + CompiledQuery, + DefaultQueryCompiler, + type DatabaseConnection, + type Dialect, + type Driver, + type Kysely, + type QueryResult, + type TransactionSettings, +} from 'kysely'; + +import { type MockedFn } from '../mockHelpers/jestMocks.js'; + +type WarehouseDriverConfig = { + acquireConnection(): Promise; + releaseConnection(conn: DatabaseConnection): Promise; + destroyAllResources(): Promise; +}; + +class WarehouseQueryCompiler extends DefaultQueryCompiler { + protected override getCurrentParameterPlaceholder() { + return ':' + String(this.numParameters); + } + protected override getLeftIdentifierWrapper() { + return '"'; + } + protected override getRightIdentifierWrapper() { + return '"'; + } +} + +class WarehouseTestDriver implements Driver { + constructor(private readonly config: WarehouseDriverConfig) {} + + public async init() {} + + public async acquireConnection() { + return this.config.acquireConnection(); + } + + public async beginTransaction( + connection: DatabaseConnection, + settings: TransactionSettings, + ) { + const { isolationLevel } = settings; + if ( + isolationLevel && + isolationLevel !== 'read committed' && + isolationLevel !== 'repeatable read' + ) { + throw new Error( + 'Only "read committed" and "repeatable read" isolation levels are supported.', + ); + } + + await connection.executeQuery(CompiledQuery.raw(`begin`)); + } + + public async commitTransaction(connection: DatabaseConnection) { + await connection.executeQuery(CompiledQuery.raw(`commit`)); + } + + public async rollbackTransaction(connection: DatabaseConnection) { + await connection.executeQuery(CompiledQuery.raw(`rollback`)); + } + + public async releaseConnection(conn: DatabaseConnection) { + await this.config.releaseConnection(conn); + } + + public async destroy() { + return this.config.destroyAllResources(); + } +} + +class WarehouseDialectForTests implements Dialect { + constructor(private readonly opts: { connection: WarehouseDriverConfig }) {} + + createAdapter() { + return { + supportsTransactionalDdl: false, + supportsReturning: false, + acquireMigrationLock(_db: Kysely) { + throw new Error('Migrations with kysely not supported in test dialect.'); + }, + releaseMigrationLock(_db: Kysely) { + throw new Error('Migrations with kysely not supported in test dialect.'); + }, + }; + } + + createDriver() { + return new WarehouseTestDriver(this.opts.connection); + } + + createIntrospector(_db: Kysely): never { + throw new Error('Introspection not supported in test dialect.'); + } + + createQueryCompiler() { + return new WarehouseQueryCompiler(); + } +} + +export function makeMockWarehouseDialect( + executeMockFn: MockedFn< + (it: CompiledQuery) => Promise> + >, +) { + async function* emptyStream(): AsyncIterableIterator { + throw new Error('not supported'); + } + + return new WarehouseDialectForTests({ + connection: { + async acquireConnection() { + return { + executeQuery: executeMockFn as DatabaseConnection['executeQuery'], + streamQuery: + emptyStream as unknown as DatabaseConnection['streamQuery'], + }; + }, + async releaseConnection() {}, + async destroyAllResources() {}, + }, + }); +} diff --git a/server/workers_jobs/SnowflakeIngestionToS3Worker.ts b/server/workers_jobs/SnowflakeIngestionToS3Worker.ts deleted file mode 100644 index 9279acc..0000000 --- a/server/workers_jobs/SnowflakeIngestionToS3Worker.ts +++ /dev/null @@ -1,395 +0,0 @@ -import { compress } from '@mongodb-js/zstd'; -import lodash from 'lodash'; - -import { type KafkaSchemaMap } from '../iocContainer/index.js'; -import { inject } from '../iocContainer/utils.js'; -import { type DecodedMessage } from '../kafka/index.js'; -import { type S3StoreObject } from '../services/s3StoreObject.js'; -import { type SnowflakeOutboxKafkaMessageValue } from '../snowflake/snowflake.js'; -import { b64UrlEncode, jsonStringify, type JsonOf } from '../utils/encoding.js'; -import { pad } from '../utils/misc.js'; -import { getUtcParts } from '../utils/time.js'; -import { type NonEmptyArray } from '../utils/typescript-types.js'; -import { type Worker } from './index.js'; - -const { SNOWFLAKE_S3_BUCKET_REGION, SNOWFLAKE_S3_BUCKET_NAME } = process.env; -const { mapValues } = lodash; - -// NB: If we add more topics to this subscription, we'll have to think -// about the deployment/rollout considerations there. -// See https://github.com/tulios/kafkajs/issues/1040#issuecomment-1277449487 -const topicsToConsume = ['DATA_WAREHOUSE_INGEST_EVENTS'] as const; - -type ConsumedTopic = (typeof topicsToConsume)[number]; -type Message = DecodedMessage>; - -type PartitionGuid = JsonOf; - -export default inject( - ['Kafka', 'S3StoreObjectFactory', 'Tracer'], - (kafka, storeObjectFactory, tracer) => { - // TODO: unfortunately, this needs to be in this outer scope as a mutable - // variable to support shutdown. - let consumer: ReturnType>; - - return { - type: 'Worker' as const, - async run(_signal) { - const s3StoreObject = storeObjectFactory( - SNOWFLAKE_S3_BUCKET_REGION!, - SNOWFLAKE_S3_BUCKET_NAME!, - ); - - consumer = kafka.consumer({ - // NB: don't rename lightly, as this has permissions - // associated w/ it through Kafka ACLS. - groupId: 'snowflake-ingest-worker', - maxBytesPerPartition: 20 * 1024 * 1024, // 20 mb - sessionTimeout: 90_000, - }); - - const unuploadedMessagesByPartition = new Map< - PartitionGuid, - Map> - >(); - - // Let's talk about error cases.... - // - // 1. If the worker is shut down by kubernetes (eg. cuz a new version is - // deployed and being rolled out, or because k8s otherwise decides - // this pod needs to be evicted/moved to another node), then - // shutdown() will run, which will call `consumer.disconnect()`, - // which also makes the consumer stop pulling new messages, so - // there's nothing else we have to do. Messages already loaded into - // memory don't need to be uploaded to s3 because their offset won't - // be committed, so we'll just re-process them next time. If an - // upload's in progress, I think it's ok to let it try to finish - // (even with retries) as that shouldn't take too long, and if k8s - // ends up killing the process ungracefully, it's not a huge deal. - // - // While this consumer is restarting, the other consumers will get - // assigned its partitions, so we have to make sure they can handle - // the extra memory load of having more batches worth of data, and - // that they react correctly to the new partition assignment. - // - // 2. Uploading to S3 could fail. If that happens, we can't really - // proceed, so we probably want to retry for a while and then crash. - // (We crash so that monitoring systems can alert on the failure.) - // Again, no state gets messed up in this case, since we haven't - // advanced the Kafka offsets. - // - // 3. If Kafka is unavailable when the worker starts, then the consumer - // will fail to connect or subscribe, the worker will throw an - // exception (after some internal kafkajs retrying), no state will - // get messed up, and k8s can restart the worker. - // - // 4. If Kafka becomes unavailable while the worker is running, there - // are two cases: - // - // 1. kafkajs detects that Kafka is unavailable when it tries to - // fetch the next batch. At that point, we'll likely have some - // messages loaded into memory whose offset we haven't committed - // yet, and that we haven't yet tried to upload to s3. By - // default kafkajs will try to reconnect for a while; if that - // fails, I think an error is eventually raised (either thrown - // or as the "CRASH" event), in which case we should be good: - // the buffered-but-not-uploaded-to-s3 messages will be - // discarded and reprocessed when the worker restarts. - // - // 2. kafkajs detects that kafka is unavailable when it tries to - // commit the offsets, _after uploading the batch to s3_. This - // is the tricky case. Kafkajs will already retry committing the - // offsets but, if that fails, what do we do? If we shut down - // the worker, the consumer will restart with a different uuid - // and duplicate data will end up in s3. To avoid this, we need - // to make the s3 upload truly idempotent -- i.e., the next time - // the worker retries/restarts, the generated upload will have - // the exact same rows and file name. The only way to do that, I - // think, is to make the file name include the partition id - // (assuming that partition id + high-res timestamp of first - // message is a unique, stable id for a batch) and make sure the - // file/batch always has a consistent number of records. - // Unfortunately, this approach requires keeping in-memory - // batches for each partition, which is gonna mean more memory - // usage and a bigger amount of work to redo if the worker - // crashes, but I think it's still the best option, so that's - // what we do below. - // - NB: this means we can't resize batches or this will break. - // - // 5. If a partition gets reassigned while there's data for it in the - // batch in memory, we need to clear that out. I don't think it - // matters if there's a race condition here and with an s3 upload, - // thanks to the idempotence. - // - // 6. If the S3 upload takes a long time (cuz it's retrying or it's just - // a big file and there's some intermittent network hiccup), we - // probably want to make sure that Kafka doesn't think the consumer - // is dead and needlessly reassign its partitions. So, that could - // mean sending some heartbeats outside of the built-in kafkajs flow. - // - // NB: this is all assuming that Snowflake will only ingest a file in S3 - // with the same name one time; otherwise, the idempotent re-upload - // still could change the file modified time, which could trigger - // Snowflake to reingest it. If that's the case, then we still have a - // small risk of data duplication. Luckily, it seems like Snowflake - // behaves well here, and dedupes by file md5 (idempotency keys ftw!) - // https://stackoverflow.com/questions/59184903/snowpipe-not-working-after-upload-same-file-twice - await consumer.connect(); - await consumer.subscribe({ topics: topicsToConsume }); - - // Handle the consumer getting assigned different partitions. - // Addresses parts of case (1) and (5) above. - consumer.on('consumer.group_join', (e) => { - const assignedPartitions = e.payload.memberAssignment; - const assignedPartitionKeys = new Set( - Object.entries(assignedPartitions).flatMap(([topic, partitions]) => - partitions.map((p) => jsonStringify([topic, p] as const)), - ), - ); - - for (const partitionKey of unuploadedMessagesByPartition.keys()) { - if (!assignedPartitionKeys.has(partitionKey)) { - unuploadedMessagesByPartition.delete(partitionKey); - } - } - }); - - // An error thrown within eachBatch does not lead the promise returned - // by `consumer.run()` to reject. Instead, that promise resolves - // immediately once the consumer starts running and, if an error occurs - // within `eachBatch`, kafkajs will simply retry the `eachBatch` - // callback a few times (the exact number is configurable). However, - // _even once that retry count limit is exhausted_, the `consumer.run()` - // call still does not reject, as you might expect. - // - // Instead, once that retry count is exhausted, kafkajs switches from - // silently + automatically retrying `eachBatch` to emitting a `crash` - // event on the consumer. However, even after this `crash` event is - // emitted, kafkajs does not stop the consumer or raise an exception. - // Instead, kafkajs's default behavior is to simply restart the consumer - // after the crash event. So the overall nodejs process will, by - // default, basically never crash. - // - // However, for now, we _want_ Node to crash if we're getting repeated - // errors (even after retrying) within `eachBatch`, so that we can take - // advantage of simple, out-of-the-box monitoring to see these crashes. - // Therefore, we register a crash listener that throws unconditionally - // (again, this only applies once the automatic retries have failed and - // the crash event is emitted). The unconditional part means that we're - // ignoring `event.payload.restart`, which is the flag for whether - // kafkajs should restart the consumer after the crash, and which is - // always true by default. Kafkajs takes a `retryOnFailure` setting for - // configuring that, but we don't even bother, because we always want to - // crash nodejs/the whole process once the consumer crash event is - // emitted. - consumer.on('consumer.crash', (event) => { - const { error } = event.payload; - tracer.logActiveSpanFailedIfAny(error); - throw error; - }); - - await consumer.run({ - // We need to tell Kafkajs not to automatically commit offsets, - // because we only want to commit the offset on a partition after - // we've successfully uploaded the messages up to that offset to S3, - // which is something that kafkajs can't know automatically. - autoCommit: false, - - // In addition to the Kafka concept of commiting an offset, kafkajs - // defines it's own concept of "resolving" an offset. The idea is - // supposed to be that commiting an offset is expensive/flaky (it - // requires a network call to the kafka broker), so, instead, you can - // just "resolve" the offset first, which records in memory that - // you've proccessed the message. Then, kafkajs can periodically/in - // batches actually commit the resolved offsets. - // - // By default, when `eachBatch` finishes successfully, kafkajs - // automatically resolves the offsets for all messages in that batch. - // Then, the docs say that these automatically-resolved offsets are - // automatically commited, which we obviously don't want (for the same - // reason that we turned off autoCommit). However, it looks like the - // docs are wrong, and kafkajs respects the overall autoCommit setting - // when deciding whether to auto-commit the auto-resolved offsets. - // Nevertheless, it seemed safer to not resolve the offsets after - // `eachBatch` finishes, just in case that did lead to those offsets - // getting committed automatically in some code path, before the - // actual S3 upload with the batch's content had succeded. - // Unfortunately, the kafkajs setting to turn off the auto-resolving - // behavior has a bug that leads to the same messages being processed - // over and over (it looks like the last resolved offset might be part - // of what kafkajs uses to determine which messages to fetch next), so - // I gave up on/commented out that setting for now. See - // https://github.com/tulios/kafkajs/issues/540#issuecomment-907748113 - // eachBatchAutoResolve: false, - - // While we're uploading one partition's messages to S3 (after we've - // accumulated a full batch), there's no reason we shouldn't be able - // to process other partition's messages on the main thread. - // `partitionsConsumedConcurrently` enables that. Although just note - // that this setting also has a fairly serious bug -- see - // https://github.com/tulios/kafkajs/issues/945 -- so it's only safe - // because our processing is idempotent. - partitionsConsumedConcurrently: 4, - - eachBatch: tracer.traced( - { operation: 'processBatch', resource: 'snowflakeIngestionWorker' }, - async function ({ batch, heartbeat }) { - // Heartbeat every 5s while the upload is in progress/being retried - // (kafkajs will dedupe these if we're calling heartbeat more often - // than heartbeat interval), to avoid 30s session timeout if s3 - // upload has to be retried a few times or takes a long time. - // Handles case (6) above. - const heartbeatInverval = setInterval(() => { - heartbeat().catch((reason) => { - tracer.logActiveSpanFailedIfAny(reason); - }); - }, 5_000); - - try { - const { decodedMessages: messages, topic, partition } = batch; - const partitionKey = jsonStringify([topic, partition] as const); - - // NB: unploadedMessagesForPartition must be a Map, keyed by - // offset, rather than an array, so that, if `eachBatch` errors - // and is retried, the messages in the batch won't get added to - // `unploadedMessagesForPartition` twice -- instead, they'll be - // de-duped by offset -- to prevent duplicate data in S3. - const unploadedMessagesForPartition = - unuploadedMessagesByPartition.get(partitionKey) ?? - new Map(); - - // Mutate map in place, rather than cloning, for perf. - for (const message of messages) { - unploadedMessagesForPartition.set( - message.offset, - message.value, - ); - } - - // (re)assign to `unuploadedMessagesByPartition`, in case - // `unploadedMessagesForPartition` was newly created above. - unuploadedMessagesByPartition.set( - partitionKey, - unploadedMessagesForPartition, - ); - - // NB: we can't change this 30,000 number w/o risking duplicate - // data in s3 or a smaller upload overwriting the bigger one. - // Would need to pause all consumers, change it for all of them, - // then resume. - // - // NB: 30,000 rows is (currently) ~190mb as a JSON blob -- though - // the data we send to s3 is somewhat less (~130mb) b/c it doesn't - // have the `recorded_at` date for each row. This is probably the - // max we should upload at once, to not get too far from - // Snowflake's recommended size (150mb), and to not have to retry - // too much data if an upload to S3 fails. It also means that our - // Node memory use, which is roughly (size of a batch as JSON + - // size of a batch as in-memory JS objects + 200mb overhead) - // should stay well under the limit, and give garbage collection a - // bit of breathing room for how often it needs to kick in. - if (unploadedMessagesForPartition.size >= 30_000) { - try { - // prettier-ignore - await tracer.addActiveSpan( - { operation: 'storeBatch', resource: 'snowflakeIngestionWorker' }, - async () => storeBatch( - s3StoreObject, - partitionKey, - // Cast to non-empty array is safe cuz of `if` test above. - [...unploadedMessagesForPartition.values()] satisfies - SnowflakeOutboxKafkaMessageValue[] as - NonEmptyArray - ) - ); - - // commit offset only after storing successfully. The +1 here - // _is_ necessary, after extensive testing, because kafka starts - // consuming at the committed offset so, if we commit the last - // offset that was successfully processed, and then the worker - // restarts or there's a rebalance, that message will get - // processed twice. We use BigInt here since the offset is - // uint64. - await consumer.commitOffsets([ - { - topic, - partition, - offset: (BigInt(batch.lastOffset()) + 1n).toString(), - }, - ]); - - // Then clear the batch! - unuploadedMessagesByPartition.delete(partitionKey); - } catch (e: unknown) { - tracer.logActiveSpanFailedIfAny(e); - // Rethrow to trigger eachBatch retry, which addresses - // error cases (2) and (4.2). This'll trigger eachBatch to be - // retried, until the process eventually crashes. See comment on - // the crash listener. - throw e; - } - } - } finally { - clearInterval(heartbeatInverval); - } - }, - ), - }); - }, - async shutdown() { - await consumer.disconnect(); - }, - } satisfies Worker; - }, -); - -async function storeBatch( - storeObject: S3StoreObject, - partitionGuid: PartitionGuid, - batch: NonEmptyArray<{ dataJSON: string; recordedAt: Date; table: string }>, -) { - const startDate = new Date(batch[0].recordedAt); - const { year, ...startDateParts } = getUtcParts(startDate); - - // pad all date parts (except year) to consistent lengths, to make sure that - // they sort correctly lexiographically in snowflake (i.e., to make sure they - // get ingested in the right order, if snowflake pays attention to that). - // This is also why we add the partition id at the _end_ of the file name. - const ms = pad('0', 3, String(startDateParts.milliseconds)); - const { month, date, hour, minute, second } = mapValues( - startDateParts, - (it) => pad('0', 2, String(it)), - ); - - // make a new folder for every 10 minute increment. - // see https://docs.snowflake.com/en/user-guide/data-load-considerations-manage.html#partitioning-staged-data-files - const minuteBucket = minute[0]; - - // NB: We use no punctuation in HH:MM:SS.MS, and b64url encode the partition - // id, to ensure the resulting filename is safe in S3 and Snowflake. - const encodedPartitionGuid = b64UrlEncode(partitionGuid); - const fileName = - 'api/INGESTED_JSON/' + - `${year}/${month}/${date}/${hour}/${minuteBucket}/` + - `${year}-${month}-${date}T${hour}${minute}${second}${ms}${encodedPartitionGuid}.json.zst`; - - // TODO: consider creating a ReadableStream that yields one buffer of data - // at a time, rather than concatenating all these buffers and passing in - // that result, as I think the `Buffer.concat()` call is gonna allocate a - // new (~100mb) buffer too. But profiling shows that this is not a huge - // expense -- the `Buffer.concat()` call only amounts for 2% of total CPU - // usage, and it looks like much of the underlying memory is reused -- so - // this is a low priority. This is why we profile first, kids! - const data = Buffer.concat( - batch.map((it) => - Buffer.from( - // eslint-disable-next-line no-restricted-syntax - `{"table":${JSON.stringify(it.table)},"data":${it.dataJSON}}` + '\n', - 'utf8', - ), - ), - ); - - // Upload compressed data to s3 - await storeObject(fileName, await compress(data, 6)); -}