From 59d6b16ecc4b0fe14ffc3de9c5ea3285daedba6e Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Mon, 11 Sep 2023 11:16:02 +0000 Subject: [PATCH 01/11] Registry CLI changes --- .env | 215 + docker-compose.yml | 141 +- imports/config.json | 21 +- imports/realm-export.json | 5094 +++++++---------- tools/cli/contributing.md | 2 +- tools/cli/package.json | 12 +- tools/cli/pnpm-lock.yaml | 2758 +++------ tools/cli/readme.md | 4 +- tools/cli/src/commands/down.ts | 116 +- tools/cli/src/commands/health.ts | 70 +- tools/cli/src/commands/init.ts | 66 +- tools/cli/src/commands/restart.ts | 3 +- tools/cli/src/extensions/cli-extension.ts | 19 +- tools/cli/src/templates/.env-cli | 7 +- .../config/keycloak/realm-export.json | 2 +- tools/cli/src/toolbox/registry/create.ts | 64 +- tools/cli/src/toolbox/registry/down.ts | 101 +- tools/cli/src/toolbox/registry/health.ts | 23 +- .../src/toolbox/registry/helpers/keycloak.ts | 73 +- tools/cli/src/toolbox/registry/restart.ts | 2 +- tools/cli/src/types.ts | 50 +- 21 files changed, 3719 insertions(+), 5124 deletions(-) diff --git a/.env b/.env index bd676a9b5..aeaf3981b 100644 --- a/.env +++ b/.env @@ -1 +1,216 @@ RELEASE_VERSION=v0.0.14 +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME= +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService +SCHEMA_DIR=config/schemas +KEYCLOAK_CLIENT_ID=registry-frontend +KEYCLOAK_ADMIN_CLIENT_ID=admin-api +KEYCLOAK_REALM=sunbird-rc +KEYCLOAK_ADMIN_USER=admin +KEYCLOAK_ADMIN_PASSWORD=admin +AUTHENTICATION_ENABLED=true +ASYNC_ENABLED=false +MANAGER_TYPE=DefinitionsManager +SIGNATURE_ENABLED=true +SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService diff --git a/docker-compose.yml b/docker-compose.yml index 4c520d8cf..c8335d722 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,26 @@ -version: "2.4" +version: '2.4' services: es: image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1 environment: - discovery.type=single-node - - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' - ELASTIC_PASSWORD=${ELASTIC_SEARCH_PASSWORD} - xpack.security.enabled=${ELASTIC_SECURITY_ENABLED-false} ports: - - "9200:9200" - - "9300:9300" + - '9200:9200' + - '9300:9300' healthcheck: - test: [ "CMD", "curl", "-f", "localhost:9200/_cluster/health", "--header", "Authorization: Basic ZWxhc3RpYzpEa0llZFBQU0Ni" ] + test: + [ + 'CMD', + 'curl', + '-f', + 'localhost:9200/_cluster/health', + '--header', + 'Authorization: Basic ZWxhc3RpYzpEa0llZFBQU0Ni', + ] interval: 30s timeout: 10s retries: 4 @@ -21,13 +29,13 @@ services: volumes: - ./${DB_DIR-db-data}:/var/lib/postgresql/data ports: - - "5432:5432" + - '5432:5432' environment: - POSTGRES_DB=registry - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres healthcheck: - test: [ "CMD-SHELL", "pg_isready -U postgres" ] + test: ['CMD-SHELL', 'pg_isready -U postgres'] interval: 10s timeout: 5s retries: 5 @@ -43,7 +51,7 @@ services: - event_enabled=${EVENT_ENABLED-false} - event_topic=events - event_providerName=dev.sunbirdrc.registry.service.impl.KafkaEventService - - elastic_search_connection_url=es:9200 + - elastic_search_connection_url=${ELASTIC_SEARCH_CONNECTION_URL-es:9200} - elastic_search_scheme=${ELASTIC_SEARCH_SCHEME-http} - elastic_search_auth_enabled=${ELASTIC_SECURITY_ENABLED-false} - elastic_search_username=${ELASTIC_SEARCH_USERNAME-elastic} @@ -72,7 +80,7 @@ services: - logging.level.root=INFO - enable_external_templates=true - async_enabled=${ASYNC_ENABLED-false} - - authentication_enabled=true + - authentication_enabled=${AUTHENTICATION_ENABLED-true} - kafka_bootstrap_address=kafka:9092 - webhook_enabled=false - webhook_url=http://localhost:5001/api/v1/callback @@ -83,14 +91,16 @@ services: - notification_enabled=${NOTIFICATION_ENABLED-false} - notification_url=${NOTIFICATION_URL-http://notification-ms:8765/notification-service/v1/notification} ports: - - "8081:8081" + - '8081:8081' depends_on: - es: - condition: service_healthy db: condition: service_healthy healthcheck: - test: [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8081/health || exit 1" ] + test: + [ + 'CMD-SHELL', + 'wget -nv -t1 --spider http://localhost:8081/health || exit 1', + ] interval: 30s timeout: 10s retries: 10 @@ -111,17 +121,16 @@ services: - KEYCLOAK_IMPORT=/opt/jboss/keycloak/imports/realm-export.json - PROXY_ADDRESS_FORWARDING=true healthcheck: - test: - ["CMD-SHELL", "curl -f http://localhost:9990/ || exit 1"] + test: ['CMD-SHELL', 'curl -f http://localhost:9990/ || exit 1'] interval: 30s timeout: 10s retries: 10 ports: - - "8080:8080" - - "9990:9990" + - '8080:8080' + - '9990:9990' depends_on: db: - condition: service_healthy + condition: service_started claim-ms: image: dockerhub/sunbird-rc-claim-ms:${RELEASE_VERSION} environment: @@ -130,14 +139,18 @@ services: - connectionInfo_password=postgres - sunbirdrc_url=http://registry:8081 ports: - - "8082:8082" + - '8082:8082' depends_on: db: condition: service_started registry: condition: service_started healthcheck: - test: [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8082/health || exit 1" ] + test: + [ + 'CMD-SHELL', + 'wget -nv -t1 --spider http://localhost:8082/health || exit 1', + ] interval: 30s timeout: 10s retries: 10 @@ -147,12 +160,11 @@ services: - PORT=8079 - TIME_ZONE=Asia/Kolkata ports: - - "8079:8079" + - '8079:8079' volumes: - ./imports:/etc/signer healthcheck: - test: - [ "CMD-SHELL", "curl -f http://localhost:8079/health || exit 1" ] + test: ['CMD-SHELL', 'curl -f http://localhost:8079/health || exit 1'] interval: 30s timeout: 10s retries: 10 @@ -161,10 +173,13 @@ services: environment: - PORT=8078 ports: - - "8078:8078" + - '8078:8078' healthcheck: test: - [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8078/health || exit 1" ] + [ + 'CMD-SHELL', + 'wget -nv -t1 --spider http://localhost:8078/health || exit 1', + ] interval: 30s timeout: 10s retries: 10 @@ -177,20 +192,24 @@ services: - MINIO_ROOT_PASSWORD=12345678 command: server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 /data ports: - - "9000:9000" - - "9001:9001" + - '9000:9000' + - '9001:9001' healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ] + test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live'] interval: 30s timeout: 20s retries: 10 notification-ms: image: dockerhub/sunbird-rc-notification-service:${RELEASE_VERSION} ports: - - "8765:8765" + - '8765:8765' healthcheck: test: - [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8765/notification-service/v1/health || exit 1" ] + [ + 'CMD-SHELL', + 'wget -nv -t1 --spider + http://localhost:8765/notification-service/v1/health || exit 1', + ] interval: 30s timeout: 10s retries: 10 @@ -203,27 +222,33 @@ services: zookeeper: image: confluentinc/cp-zookeeper:latest ports: - - "2181:2181" + - '2181:2181' environment: - ZOOKEEPER_CLIENT_PORT: "2181" - ZOOKEEPER_TICK_TIME: "2000" + ZOOKEEPER_CLIENT_PORT: '2181' + ZOOKEEPER_TICK_TIME: '2000' kafka: image: confluentinc/cp-kafka:latest depends_on: zookeeper: condition: service_started ports: - - "9092:9092" + - '9092:9092' environment: - KAFKA_BROKER_ID: "1" - KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" - KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka:9092,OUTSIDE://localhost:9094" - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT" - KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" + KAFKA_BROKER_ID: '1' + KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' + KAFKA_ADVERTISED_LISTENERS: 'INTERNAL://kafka:9092,OUTSIDE://localhost:9094' + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT' + KAFKA_INTER_BROKER_LISTENER_NAME: 'INTERNAL' + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: '1' healthcheck: test: - [ "CMD", "kafka-topics", "--list", "--bootstrap-server", "localhost:9092" ] + [ + 'CMD', + 'kafka-topics', + '--list', + '--bootstrap-server', + 'localhost:9092', + ] interval: 30s timeout: 10s retries: 10 @@ -232,9 +257,10 @@ services: environment: - CONFIG_BASE_PATH=/etc/keys ports: - - "3300:3300" + - '3300:3300' healthcheck: - test: [ "CMD", "curl", "-f", "localhost:3300/public-key-service/api/v1/health" ] + test: + ['CMD', 'curl', '-f', 'localhost:3300/public-key-service/api/v1/health'] interval: 30s timeout: 10s retries: 10 @@ -243,16 +269,16 @@ services: context-proxy-service: image: dockerhub/sunbird-rc-context-proxy-service ports: - - "4400:4400" + - '4400:4400' healthcheck: - test: [ "CMD", "curl", "-f", "localhost:4400/health" ] + test: ['CMD', 'curl', '-f', 'localhost:4400/health'] interval: 30s timeout: 10s retries: 10 nginx: image: dockerhub/sunbird-rc-nginx ports: - - "80:80" + - '80:80' depends_on: registry: condition: service_healthy @@ -267,7 +293,7 @@ services: file-storage: condition: service_started healthcheck: - test: [ "CMD", "curl", "-f", "localhost:80" ] + test: ['CMD', 'curl', '-f', 'localhost:80'] interval: 30s timeout: 10s retries: 10 @@ -280,7 +306,7 @@ services: KAFKA_METRICS_TOPIC: events REDIS_URL: redis:6379 ports: - - "8070:8070" + - '8070:8070' depends_on: kafka: condition: service_started @@ -289,29 +315,36 @@ services: redis: image: redis:latest ports: - - "6379:6379" + - '6379:6379' digilocker-certificate-api: image: dockerhub/sunbird-rc-digilocker-certificate-api volumes: - ./services/digilocker-certificate-api/config/:/go/config/ ports: - - "8087:8087" + - '8087:8087' environment: KEYCLOAK_CLIENT_ID: admin-api - KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_SECRET} + KEYCLOAK_CLIENT_SECRET: 61fdeaf0-9654-4c12-b7ff-f7116c9e4fca DIGILOCKER_HMAC_AUTHKEY: ${DIGILOCKER_HMAC_AUTHKEY} DIGILOCKER_AUTH_KEYNAME: x-digilocker-hmac PORT: 8087 bulk_issuance: image: dockerhub/sunbird-rc-bulk-issuance ports: - - "5665:5665" + - '5665:5665' environment: REGISTRY_BASE_URL: http://registry:8081/ DATABASE_HOST: db + depends_on: + db: + condition: service_healthy + keycloak: + condition: service_healthy clickhouse: image: clickhouse/clickhouse-server:23.4.2.11-alpine ports: - - "9002:9000" + - '9002:9000' healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1 + test: + wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit + 1 diff --git a/imports/config.json b/imports/config.json index 5151928cf..dfd73ff7a 100644 --- a/imports/config.json +++ b/imports/config.json @@ -1,11 +1,12 @@ { - "issuers": { - "default": { - "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQAB\n-----END PUBLIC KEY-----\n", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQABAoIBAHPILMUoLt5UTd5f/YnebqgeCRNAmGOBcwk7HtbMqQoGF93qqvZFd30XOAJZ/ncTpz77Vl95ToxxrWk1WQLCe+ZpOK3Dgk5sFSm8zXx1T64UBNPUSnWoh37C1D39+b9rppCZScgnxlyPdSLy3h3q8Hyoy+auqUEkm/ms5W2lT3fJscyN1IAyHrhsOBWjl3Ilq5GxBo5tbYv/Fb1pQiP/p2SIHA1+2ASXNYQP100F5Vn0V6SFtBXTCQnwcvbP083NvlGxs9+xRs3MCUcxCkKepWuzYwOZDmu/2yCz1/EsP6wlsYEHmCZLdIb0tQt0caqzB/RoxfBpNRIlhOtqHvBzUgECgYEAzIRn5Y7lqO3N+V29wXXtVZjYWvBh7xUfOxAwVYv0rKI0y9kHJHhIrU+wOVOKGISxBKmzqBQRPvXtXW8E0/14Zz82g60rRwtNjvW0UoZAY3KPouwruUIjAe2UnKZcQ//MBTrvds8QGpL6nxvPsBqU0y2K+ySAOxBtNtGEjzv8nxUCgYEAxRbMWukIbgVOuQjangkfJEfA1UaRFQqQ8jUmT9aiq2nREnd4mYP8kNKzJa9L7zj6Un6yLH5DbGspZ2gGODeRw3uVFN8XSzRdLvllNEyiG/waiysUtXfG2DPOR6xD8tXXDMm/tl9gTa8cbkvqYy10XT9MpfOAsusEZVmc0/DBBMsCgYAYdAxoKjnThPuHwWma5BrIjUnxNaTADWp6iWj+EYnjylE9vmlYNvmZn1mWwSJV5Ce2QwQ0KJIXURhcf5W4MypeTfSase3mxLc1TLOO2naAbYY3GL3xnLLK3DlUsZ9+kes3BOD097UZOFG3DIA8sjDxPxTLCoY6ibBFSa/r4GRIMQKBgQCranDCgPu79RHLDVBXM0fKnj2xQXbd/hqjDmcL+Xnx7E7S6OYTXyBENX1qwVQh9ESDi34cBJVPrsSME4WVT3+PreS0CnSQDDMfr/m9ywkTnejYMdgJHOvtDuHSpJlUk3g+vxnm3H0+E5d+trhdGiOjFnLrwyWkd5OTMqWcEEFQkQKBgFfXObDz/7KqeSaAxI8RzXWbI3Fa492b4qQUhbKYVpGn98CCVEFJr11vuB/8AXYCa92OtbwgMw6Ah5JOGzRScJKdipoxo7oc2LJ9sSjjw3RB/aWl35ChvnCJhmfSL8Usbj0nWVTrPwRLjMC2bIxkLtnm9qYXPumW1EjEbusjVMpN\n-----END RSA PRIVATE KEY-----\n", - "signatureType": "RSA", - "verificationMethod": "did:india", - "$comment": "The above are test keys and it needs to be replaced before going to production" - } - } -} \ No newline at end of file + "issuers": { + "default": { + "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQAB\n-----END PUBLIC KEY-----\n", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQABAoIBAHPILMUoLt5UTd5f/YnebqgeCRNAmGOBcwk7HtbMqQoGF93qqvZFd30XOAJZ/ncTpz77Vl95ToxxrWk1WQLCe+ZpOK3Dgk5sFSm8zXx1T64UBNPUSnWoh37C1D39+b9rppCZScgnxlyPdSLy3h3q8Hyoy+auqUEkm/ms5W2lT3fJscyN1IAyHrhsOBWjl3Ilq5GxBo5tbYv/Fb1pQiP/p2SIHA1+2ASXNYQP100F5Vn0V6SFtBXTCQnwcvbP083NvlGxs9+xRs3MCUcxCkKepWuzYwOZDmu/2yCz1/EsP6wlsYEHmCZLdIb0tQt0caqzB/RoxfBpNRIlhOtqHvBzUgECgYEAzIRn5Y7lqO3N+V29wXXtVZjYWvBh7xUfOxAwVYv0rKI0y9kHJHhIrU+wOVOKGISxBKmzqBQRPvXtXW8E0/14Zz82g60rRwtNjvW0UoZAY3KPouwruUIjAe2UnKZcQ//MBTrvds8QGpL6nxvPsBqU0y2K+ySAOxBtNtGEjzv8nxUCgYEAxRbMWukIbgVOuQjangkfJEfA1UaRFQqQ8jUmT9aiq2nREnd4mYP8kNKzJa9L7zj6Un6yLH5DbGspZ2gGODeRw3uVFN8XSzRdLvllNEyiG/waiysUtXfG2DPOR6xD8tXXDMm/tl9gTa8cbkvqYy10XT9MpfOAsusEZVmc0/DBBMsCgYAYdAxoKjnThPuHwWma5BrIjUnxNaTADWp6iWj+EYnjylE9vmlYNvmZn1mWwSJV5Ce2QwQ0KJIXURhcf5W4MypeTfSase3mxLc1TLOO2naAbYY3GL3xnLLK3DlUsZ9+kes3BOD097UZOFG3DIA8sjDxPxTLCoY6ibBFSa/r4GRIMQKBgQCranDCgPu79RHLDVBXM0fKnj2xQXbd/hqjDmcL+Xnx7E7S6OYTXyBENX1qwVQh9ESDi34cBJVPrsSME4WVT3+PreS0CnSQDDMfr/m9ywkTnejYMdgJHOvtDuHSpJlUk3g+vxnm3H0+E5d+trhdGiOjFnLrwyWkd5OTMqWcEEFQkQKBgFfXObDz/7KqeSaAxI8RzXWbI3Fa492b4qQUhbKYVpGn98CCVEFJr11vuB/8AXYCa92OtbwgMw6Ah5JOGzRScJKdipoxo7oc2LJ9sSjjw3RB/aWl35ChvnCJhmfSL8Usbj0nWVTrPwRLjMC2bIxkLtnm9qYXPumW1EjEbusjVMpN\n-----END RSA PRIVATE KEY-----\n", + "signatureType": "RSA", + "verificationMethod": "did:india", + "$comment": "The above are test keys and it needs to be replaced before going to production" + } + } +} + diff --git a/imports/realm-export.json b/imports/realm-export.json index b1af216ab..05ae2afd5 100644 --- a/imports/realm-export.json +++ b/imports/realm-export.json @@ -1,2914 +1,2184 @@ { - "id": "sunbird-rc", - "realm": "sunbird-rc", - "notBefore": 1607576887, - "defaultSignatureAlgorithm": "RS256", - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 17280000, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 172800, - "ssoSessionMaxLifespan": 17280000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "clientSessionIdleTimeout": 600, - "clientSessionMaxLifespan": 600, - "clientOfflineSessionIdleTimeout": 0, - "clientOfflineSessionMaxLifespan": 0, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "oauth2DeviceCodeLifespan": 600, - "oauth2DevicePollingInterval": 600, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": true, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "roles": { - "realm": [ - { - "id": "a4b21820-1b52-4b6a-851e-0a9955ead1f0", - "name": "default-roles-ndear", - "description": "${role_default-roles-ndear}", - "composite": true, - "composites": { - "realm": [ - "offline_access", - "uma_authorization" - ], - "client": { - "account": [ - "manage-account", - "view-profile" - ] - } - }, - "clientRole": false, - "containerId": "sunbird-rc", - "attributes": {} - }, - { - "id": "a5777369-2e60-45ee-bfcd-0cc84a46470d", - "name": "uma_authorization", - "description": "${role_uma_authorization}", - "composite": false, - "clientRole": false, - "containerId": "sunbird-rc", - "attributes": {} - }, - { - "id": "23343597-65e4-45b2-9ce5-8ff2e95cedb1", - "name": "system-admin", - "description": "system admin can address", - "composite": false, - "clientRole": false, - "containerId": "sunbird-rc", - "attributes": {} - }, - { - "id": "30d1a784-d1af-43c0-9c86-8a3679503dee", - "name": "offline_access", - "description": "${role_offline-access}", - "composite": false, - "clientRole": false, - "containerId": "sunbird-rc", - "attributes": {} - }, - { - "id": "794f2583-03b5-4cc6-b4cc-4a9c4def72df", - "name": "board-cbse", - "composite": false, - "clientRole": false, - "containerId": "sunbird-rc", - "attributes": {} - } - ], - "client": { - "registry": [], - "realm-management": [ - { - "id": "855baf85-b31e-42cf-9967-6862e2b909a3", - "name": "manage-events", - "description": "${role_manage-events}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "03569918-e595-4d62-afcb-66e9a8a4ea49", - "name": "manage-users", - "description": "${role_manage-users}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "35ef501b-937a-46b3-8138-81dd8181a4ab", - "name": "view-clients", - "description": "${role_view-clients}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-clients" - ] - } - }, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "7a6420ce-275a-46da-984d-e7eb57bba9e6", - "name": "view-identity-providers", - "description": "${role_view-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "65f6d107-80d6-460c-ba76-a23cea490238", - "name": "manage-realm", - "description": "${role_manage-realm}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "35ea1bbd-aa7b-4ff6-bb97-cb276ed6a600", - "name": "manage-authorization", - "description": "${role_manage-authorization}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "2162feb6-53a2-4334-869b-f0931ec8f1b0", - "name": "query-groups", - "description": "${role_query-groups}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "fef7be98-f397-4d7d-9f13-7c0359990454", - "name": "view-authorization", - "description": "${role_view-authorization}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "a4014ded-0179-43fd-96ac-e57e8d046cc6", - "name": "impersonation", - "description": "${role_impersonation}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "f2cbb825-7e59-48ce-b772-889b30bb2bd2", - "name": "manage-clients", - "description": "${role_manage-clients}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "7257d396-561f-41db-a689-6fe504ee7182", - "name": "view-events", - "description": "${role_view-events}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "b4c0919e-e181-40da-9621-a28d6263ac7a", - "name": "view-users", - "description": "${role_view-users}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-groups", - "query-users" - ] - } - }, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "6c685df7-3a37-47c7-a62f-a8c5f1dae87c", - "name": "manage-identity-providers", - "description": "${role_manage-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "2ce77ff3-755e-41e8-b839-b572b34c2666", - "name": "query-users", - "description": "${role_query-users}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "d08a5987-9818-4a28-8acc-3c9a26952cee", - "name": "view-realm", - "description": "${role_view-realm}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "9c92ce94-4841-448f-bcdc-dca2624f0cb8", - "name": "realm-admin", - "description": "${role_realm-admin}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "manage-events", - "manage-users", - "view-clients", - "view-identity-providers", - "manage-realm", - "manage-authorization", - "query-groups", - "view-authorization", - "impersonation", - "manage-clients", - "view-events", - "view-users", - "manage-identity-providers", - "query-users", - "view-realm", - "create-client", - "query-clients", - "query-realms" - ] - } - }, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "2ba819e5-f0d9-4603-8241-3a4c427d092c", - "name": "create-client", - "description": "${role_create-client}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "8955dec5-4d52-4407-b853-e1eb6a42f286", - "name": "query-clients", - "description": "${role_query-clients}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - }, - { - "id": "4be89b85-1385-4234-812f-6d7ca7b75e9a", - "name": "query-realms", - "description": "${role_query-realms}", - "composite": false, - "clientRole": true, - "containerId": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "attributes": {} - } - ], - "learn-app": [], - "security-admin-console": [], - "admin-api": [ - { - "id": "3eaa069b-358f-42fc-99b4-9eca779caec2", - "name": "api", - "composite": false, - "clientRole": true, - "containerId": "cd59dfa9-6289-40f9-b5c1-d76b1565501d", - "attributes": {} - }, - { - "id": "b01557bb-22c8-4245-8182-dc777a11a2fb", - "name": "uma_protection", - "composite": false, - "clientRole": true, - "containerId": "cd59dfa9-6289-40f9-b5c1-d76b1565501d", - "attributes": {} - } - ], - "account-console": [], - "admin-portal": [ - { - "id": "21944755-484e-442a-9754-9ab2f23144ef", - "name": "system-admin", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "manage-users" - ] - } - }, - "clientRole": true, - "containerId": "1564a757-4d29-4542-bf74-1b4c5e717c49", - "attributes": {} - } - ], - "broker": [ - { - "id": "34e065c1-9549-46d1-857f-510dd2616a2a", - "name": "read-token", - "description": "${role_read-token}", - "composite": false, - "clientRole": true, - "containerId": "91c2b80c-73fe-4dd0-a1eb-0797cc0b8e60", - "attributes": {} - } - ], - "registry-frontend": [], - "certificate-login": [ - { - "id": "a68b96d7-0d27-4c1c-9d28-bbad8375cca4", - "name": "recipient", - "composite": false, - "clientRole": true, - "containerId": "ac354645-3c3c-4592-879b-20a2f4f48302", - "attributes": {} - } - ], - "admin-cli": [], - "t1": [], - "account": [ - { - "id": "e62c4257-82ae-4675-b5e4-13fb3d0a853d", - "name": "manage-account", - "description": "${role_manage-account}", - "composite": true, - "composites": { - "client": { - "account": [ - "manage-account-links" - ] - } - }, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "72923824-b6b8-44fa-a087-e58c4cc4c83d", - "name": "view-profile", - "description": "${role_view-profile}", - "composite": false, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "70ce30d7-70dd-436c-a398-056c42100763", - "name": "delete-account", - "description": "${role_delete-account}", - "composite": false, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "468ad610-b5bd-49d9-80f2-869af45c238f", - "name": "manage-consent", - "description": "${role_manage-consent}", - "composite": true, - "composites": { - "client": { - "account": [ - "view-consent" - ] - } - }, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "ea78b628-aafb-42b8-b189-df7b2cb1e161", - "name": "manage-account-links", - "description": "${role_manage-account-links}", - "composite": false, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "fcf80e05-2af1-4145-8cf9-cb787bf83f28", - "name": "view-consent", - "description": "${role_view-consent}", - "composite": false, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - }, - { - "id": "a75eca07-aea9-42cb-a189-286399128b11", - "name": "view-applications", - "description": "${role_view-applications}", - "composite": false, - "clientRole": true, - "containerId": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "attributes": {} - } - ] - } - }, - "groups": [ - { - "id": "fd78713f-2d21-4f23-871c-703ba812ac45", - "name": "board-cbse", - "path": "/board-cbse", - "attributes": {}, - "realmRoles": [], - "clientRoles": {}, - "subGroups": [] - } - ], - "defaultRole": { - "id": "a4b21820-1b52-4b6a-851e-0a9955ead1f0", - "name": "default-roles-ndear", - "description": "${role_default-roles-ndear}", - "composite": true, - "clientRole": false, - "containerId": "sunbird-rc" - }, - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "webAuthnPolicyRpEntityName": "keycloak", - "webAuthnPolicySignatureAlgorithms": [ - "ES256" - ], - "webAuthnPolicyRpId": "", - "webAuthnPolicyAttestationConveyancePreference": "not specified", - "webAuthnPolicyAuthenticatorAttachment": "not specified", - "webAuthnPolicyRequireResidentKey": "not specified", - "webAuthnPolicyUserVerificationRequirement": "not specified", - "webAuthnPolicyCreateTimeout": 0, - "webAuthnPolicyAvoidSameAuthenticatorRegister": false, - "webAuthnPolicyAcceptableAaguids": [], - "webAuthnPolicyPasswordlessRpEntityName": "keycloak", - "webAuthnPolicyPasswordlessSignatureAlgorithms": [ - "RS256" - ], - "webAuthnPolicyPasswordlessRpId": "", - "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified", - "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified", - "webAuthnPolicyPasswordlessRequireResidentKey": "not specified", - "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified", - "webAuthnPolicyPasswordlessCreateTimeout": 0, - "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false, - "webAuthnPolicyPasswordlessAcceptableAaguids": [], - "users": [ - { - "id": "d9e68be4-205a-4b44-8301-1fea2557f1cf", - "createdTimestamp": 1607599408105, - "username": "service-account-admin-api", - "enabled": true, - "totp": false, - "emailVerified": false, - "serviceAccountClientId": "admin-api", - "disableableCredentialTypes": [], - "requiredActions": [], - "realmRoles": [ - "uma_authorization", - "offline_access" - ], - "clientRoles": { - "realm-management": [ - "manage-users", - "manage-realm" - ], - "admin-api": [ - "api" - ], - "account": [ - "manage-account", - "view-profile" - ] - }, - "notBefore": 0, - "groups": [] - }, - { - "id": "6d36477b-5071-419a-8623-b9eac9fefb44", - "createdTimestamp": 1630326978632, - "username": "service-account-t1", - "enabled": true, - "totp": false, - "emailVerified": false, - "serviceAccountClientId": "t1", - "disableableCredentialTypes": [], - "requiredActions": [], - "realmRoles": [ - "default-roles-ndear" - ], - "notBefore": 0, - "groups": [] - } - ], - "scopeMappings": [ - { - "clientScope": "offline_access", - "roles": [ - "offline_access" - ] - } - ], - "clientScopeMappings": { - "account": [ - { - "client": "account-console", - "roles": [ - "manage-account" - ] - } - ] - }, - "clients": [ - { - "id": "9ec6a48d-afbb-42b5-aa1b-372863b6ad8d", - "clientId": "account", - "name": "${client_account}", - "rootUrl": "${authBaseUrl}", - "baseUrl": "/realms/sunbird-rc/account/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "/realms/sunbird-rc/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "login_theme": "sunbird-rc" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "86b6a7f5-44a5-4a74-afaa-8627e0e85951", - "clientId": "account-console", - "name": "${client_account-console}", - "rootUrl": "${authBaseUrl}", - "baseUrl": "/realms/sunbird-rc/account/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "/realms/sunbird-rc/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "pkce.code.challenge.method": "S256", - "login_theme": "sunbird-rc" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "id": "b9ad22cd-f358-4437-bc0f-c6eb4dbaa583", - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "cd59dfa9-6289-40f9-b5c1-d76b1565501d", - "clientId": "admin-api", - "rootUrl": "https://sunbird-rc.xiv.in/keycloak/auth/realms/sunbird-rc/account/", - "adminUrl": "https://sunbird-rc.xiv.in/keycloak/auth/realms/sunbird-rc/account/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "https://localhost:4202/*", - "https://sunbird-rc.xiv.in", - "https://sunbird-rc.xiv.in/keycloak/auth/realms/sunbird-rc/account/*", - "https://localhost:4200/*", - "https://oauth.pstmn.io/v1/callback", - "http://ndear.xiv.in/*" - ], - "webOrigins": [ - "https://localhost:4202/*", - "https://sunbird-rc.xiv.in", - "https://localhost:4200/*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "access.token.lifespan": "34560000", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "login_theme": "base", - "token.endpoint.auth.signing.alg": "RS256", - "use.jwks.url": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "jwt.credential.certificate": "MIICoTCCAYkCBgF2I6zd1DANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlhZG1pbi1hcGkwHhcNMjAxMjAyMTMzNjQwWhcNMzAxMjAyMTMzODIwWjAUMRIwEAYDVQQDDAlhZG1pbi1hcGkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OKVxSBGLhC+5JO7whAFB9Sk0qhGJ8xRmhaYTup1Mty4RiAwqwhkLDEBn/FJnHm3949DPRGKW6Kd1U4a6VoY95fQlSjiTUgRoOy+PDtbfboZ5Q6fDWCoFSbC+VOx9vt/9b4InY/y8o9zc6BNogrM8tjDzzSnUWNBC3+8EtKnlH8gbGsxg9BcnuxwmOWm81hnVj7z16dJDj3A0U7eLUgcEYDew5y4dEQq45Sav48Q2tCDhQPKpt7ckG1rO3Jv4SY/zAbg9tq6E6sMU7EFV+77zk92alfOA13NlxtnpP+cIgissq6IX4ier/SQ5EDEgm09lvYvxnCRz8y4h17MoXtAtAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFpCEKPK1axRAIimmbWgHnN2wri8oB71q5MeHNM7GZPFOw03EljBR1WNaaVSBIj2mb30zV6S/4hxo/DFFN9h5h//FRLJoMu6EMVwevN0oxkLCOxtzDjMaoVwzPMJTQEd587ePojWVN2xm4IMMQ1PXuUI5Xj57oeg9Wg0xtsOEw9JpTd3UMEdAUXq040Ih/kr1WqXQiECk/Y7Qq+4+l6ZmwglBOe28g3skHh72BEmlTyYdMxVdVgyJBdvr58lWr1nqiIFMicE58datnBZmbRbMso2FW6CQJhixygCBscMMktmWkyJt+sm6emDVMGcSIoIzWIJ9xiKrGIQDCYbunJWsr8=", - "client.offline.session.idle.timeout": "34560000", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "client.offline.session.max.lifespan": "34560000", - "display.on.consent.screen": "false", - "client.session.max.lifespan": "34560000", - "client.session.idle.timeout": "34560000", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": { - "direct_grant": "26526ac7-6139-40de-8a4b-84a56692a474", - "browser": "c7d2defc-aebe-463f-95f5-a18dd698285d" - }, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "id": "17167a3f-d8a0-4aa9-bd9d-1c9760206a19", - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - }, - { - "id": "a02a49fb-58f7-44f3-8d0c-8a014030cc95", - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "id": "9ee48135-b338-4498-8a62-85ffa31d95a7", - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - }, - { - "id": "88f5310c-3d3f-4c2f-9115-39efd203bef2", - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "472d720d-fb14-46bc-81fb-fb6f9ce4ea32", - "clientId": "admin-cli", - "name": "${client_admin-cli}", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret-jwt", - "secret": "**********", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": false, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "jwt.credential.certificate": "MIICoTCCAYkCBgF2I6T8YDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlhZG1pbi1jbGkwHhcNMjAxMjAyMTMyODAzWhcNMzAxMjAyMTMyOTQzWjAUMRIwEAYDVQQDDAlhZG1pbi1jbGkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCDtcvxqfyA99N24pA+E/bC4a4+dz21I7AsO3s8PDDUYmYJWtVmE2XzleGrbavWsP2xOFNM70XJ0eywfcagn+fVkvpidInxO5th0jygg2f3vOKPvOTpMZxaHYcxwmof0ANKyXr9GSw9WBMLCPyVdxNZwcxx5ns9PiYV2w4ADJY4hzJLqgxil2Z4TjbLNvyFSKbSETDMdx1N266EPXQnBCGikD1fv4x8OHcX8MFpCqHOVxDjL8UZ5QjDpBcQWS+eLibLoax06ehLeZQSvpjoUI9Jrww9Ub4Xzk5aF51nV/CT1+1iHkhE1saklysj9MGlVKVzmEnK+67gK7LhHjB2igXJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAClgDTFjpVjOB6KpPW56mnFrxvQUerPmSPJ9Umi6U5/NHRwZEDPxFjz1UfoESVjj5QJOJDrPQxOQYFGp1x8M0HEc1aTaEu55z1TL4AH3v3hJ268uKQzlxW2uNlv0gxN3j6kzbf7eGcCslJVAy8+g5JNaSgBxo75+wZbbvDcvXJWLv9WY9CKMvn8bha/RXIQSy1Df9DdwfKPL6A0WfJmEjKbOMxP0gdumq4CC99p+WFiOqtQ1GLd+nhzsWSh7xm0RpXf+J/fONrpxgK0+dk9pOJsO1N+nixXNwxQTBIpi6BpB9C4sow7o9Z49FGc/Neoe5qaTrHkxP+vGdRTvzpxMl28=", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "1564a757-4d29-4542-bf74-1b4c5e717c49", - "clientId": "admin-portal", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "https://sunbird-rc-portal.xiv.in/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "login_theme": "sunbird-rc", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "91c2b80c-73fe-4dd0-a1eb-0797cc0b8e60", - "clientId": "broker", - "name": "${client_broker}", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "ac354645-3c3c-4592-879b-20a2f4f48302", - "clientId": "certificate-login", - "rootUrl": "https://sunbird-rc.xiv.in/certificate/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://192.168.0.103:3000/*", - "https://sunbird-rc.xiv.in/*", - "http://localhost:3000/*", - "*", - "https://sunbird-rc.xiv.in/certificate/", - "http://localhost/certificate/*", - "https://sunbird-rc.xiv.in/certificate/*" - ], - "webOrigins": [ - "https://sunbird-rc.xiv.in", - "*", - "http://localhost", - "http://192.168.0.103:3000", - "http://localhost:3000" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "login_theme": "sys-admin", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "id": "9f13d0e8-4b1c-4bc1-8a9f-eaa99746cb06", - "name": "group", - "protocol": "openid-connect", - "protocolMapper": "oidc-group-membership-mapper", - "consentRequired": false, - "config": { - "full.path": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "group", - "userinfo.token.claim": "true" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "bae6d79b-dbd7-437d-a031-cd11aa0eca5d", - "clientId": "learn-app", - "rootUrl": "https://learn.xiv.in/", - "adminUrl": "http://localhost:4200/", - "baseUrl": "https://learn.xiv.in/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "redirectUris": [ - "http://localhost:4200/*", - "https://learn.xiv.in/*" - ], - "webOrigins": [ - "https://learn.xiv.in", - "http://localhost:4200" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": true, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "access.token.lifespan": "86400", - "saml.multivalued.roles": "false", - "saml.force.post.binding": "false", - "oauth2.device.authorization.grant.enabled": "false", - "backchannel.logout.revoke.offline.tokens": "false", - "saml.server.signature.keyinfo.ext": "false", - "use.refresh.tokens": "true", - "oidc.ciba.grant.enabled": "false", - "backchannel.logout.session.required": "true", - "client_credentials.use_refresh_token": "false", - "consent.screen.text": "Additional information will help in giving better experience", - "client.offline.session.idle.timeout": "86400", - "saml.client.signature": "false", - "client.offline.session.max.lifespan": "86400", - "client.session.max.lifespan": "86400", - "client.session.idle.timeout": "86400", - "saml.assertion.signature": "false", - "id.token.as.detached.signature": "false", - "saml.encrypt": "false", - "login_theme": "ndear", - "saml.server.signature": "false", - "exclude.session.state.from.auth.response": "false", - "saml.artifact.binding": "false", - "saml_force_name_id_format": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "true", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "class" - ], - "optionalClientScopes": [] - }, - { - "id": "67f8c3d3-bdc0-4994-afae-67a878fd5a2f", - "clientId": "realm-management", - "name": "${client_realm-management}", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": true, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "0e2a70ff-2160-4683-b069-b3b71ea3e198", - "clientId": "registry", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "196eb736-fa2a-40b8-b993-80c3d0ef9576", - "clientId": "registry-frontend", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "redirectUris": [ - "https://localhost:4202/*", - "https://ndear.xiv.in/*", - "http://20.198.64.128/*", - "http://localhost:4200/*", - "http://localhost:4202/*", - "https://localhost:4200/*", - "http://ndear.xiv.in/*" - ], - "webOrigins": [ - "https://localhost:4202", - "http://localhost:4202", - "https://localhost:4200", - "https://ndear.xiv.in", - "http://localhost:4200", - "http://ndear.xiv.in", - "http://20.198.64.128" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "id.token.as.detached.signature": "false", - "access.token.lifespan": "86400", - "saml.multivalued.roles": "false", - "saml.force.post.binding": "false", - "saml.encrypt": "false", - "login_theme": "ndear", - "oauth2.device.authorization.grant.enabled": "false", - "saml.server.signature": "false", - "backchannel.logout.revoke.offline.tokens": "false", - "saml.server.signature.keyinfo.ext": "false", - "use.refresh.tokens": "true", - "exclude.session.state.from.auth.response": "false", - "oidc.ciba.grant.enabled": "false", - "saml.artifact.binding": "false", - "backchannel.logout.session.required": "false", - "client_credentials.use_refresh_token": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "id": "e9c76356-abfb-4ec5-8ecd-b5fb08ff1af0", - "name": "entity_name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "userinfo.token.claim": "true", - "user.attribute": "entity", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "entity", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "6041b161-6b7d-4851-b8da-0f4df1a1d80f", - "clientId": "security-admin-console", - "name": "${client_security-admin-console}", - "rootUrl": "${authAdminUrl}", - "baseUrl": "/admin/sunbird-rc/console/", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "/admin/sunbird-rc/console/*" - ], - "webOrigins": [ - "+" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "pkce.code.challenge.method": "S256" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "id": "7972c526-7d8b-48d9-a81b-53d6c7feea75", - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "id": "26476c51-6632-40ee-9d92-1fe005400240", - "clientId": "t1", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "https://sunbird-rc.xiv.in", - "https://oauth.pstmn.io/v1/callback" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "id.token.as.detached.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "oauth2.device.authorization.grant.enabled": "false", - "saml.server.signature": "false", - "backchannel.logout.revoke.offline.tokens": "false", - "saml.server.signature.keyinfo.ext": "false", - "use.refresh.tokens": "true", - "exclude.session.state.from.auth.response": "false", - "oidc.ciba.grant.enabled": "false", - "saml.artifact.binding": "false", - "backchannel.logout.session.required": "false", - "client_credentials.use_refresh_token": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "id": "0f8f50bd-3d8e-477f-99d5-11ed54c350ea", - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "id": "72bba109-74f7-45cd-8c59-da3fbf7b16cc", - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - }, - { - "id": "e63b9b03-bbbc-4ef4-88d3-ea246f41a4d8", - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - } - ], - "clientScopes": [ - { - "id": "7ad23886-6d73-4677-9b70-5a0378e24535", - "name": "microprofile-jwt", - "description": "Microprofile - JWT built-in scope", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "false" - }, - "protocolMappers": [ - { - "id": "6636deaa-f1fc-4523-93ff-159a969a54d0", - "name": "upn", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "upn", - "jsonType.label": "String" - } - }, - { - "id": "0f4a9204-dcd8-4397-a3c6-f0ea3f6c06cd", - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "userinfo.token.claim": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ] - }, - { - "id": "78992b14-f74f-45b7-aba5-619e854a9f58", - "name": "address", - "description": "OpenID Connect built-in scope: address", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${addressScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "7736d2d7-6d91-47bd-99f8-8d09299f292b", - "name": "address", - "protocol": "openid-connect", - "protocolMapper": "oidc-address-mapper", - "consentRequired": false, - "config": { - "user.attribute.formatted": "formatted", - "user.attribute.country": "country", - "user.attribute.postal_code": "postal_code", - "userinfo.token.claim": "true", - "user.attribute.street": "street", - "id.token.claim": "true", - "user.attribute.region": "region", - "access.token.claim": "true", - "user.attribute.locality": "locality" - } - } - ] - }, - { - "id": "1cffca71-fa8d-4e64-9eba-a5dac03723f1", - "name": "profile", - "description": "OpenID Connect built-in scope: profile", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${profileScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "e832bc91-34e9-4ba2-9a58-34d895b9653c", - "name": "family name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "lastName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "family_name", - "jsonType.label": "String" - } - }, - { - "id": "e12aba9f-e940-4b57-abc6-f54c1f2bd22f", - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - }, - { - "id": "12fe1f93-8be2-4b63-bc1a-6bff006a5e7e", - "name": "nickname", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "nickname", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "nickname", - "jsonType.label": "String" - } - }, - { - "id": "901b0602-8b19-491f-9572-d66b4ec18a5a", - "name": "gender", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "gender", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "gender", - "jsonType.label": "String" - } - }, - { - "id": "2bf52f5d-6b5e-4ec6-b7cd-4d859b0f3bcf", - "name": "given name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "firstName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "given_name", - "jsonType.label": "String" - } - }, - { - "id": "b306682b-abb7-4d0c-97f3-bee95ab01591", - "name": "full name", - "protocol": "openid-connect", - "protocolMapper": "oidc-full-name-mapper", - "consentRequired": false, - "config": { - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "id": "f625962b-6008-49b7-9929-5e9bde6bb760", - "name": "birthdate", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "birthdate", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "birthdate", - "jsonType.label": "String" - } - }, - { - "id": "e4ac24f8-51de-4fcb-820e-5d25ec804d80", - "name": "profile", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "profile", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "profile", - "jsonType.label": "String" - } - }, - { - "id": "8a0b9a51-f795-4806-9d3c-2d4fcae4de68", - "name": "middle name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "middleName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "middle_name", - "jsonType.label": "String" - } - }, - { - "id": "df2089bc-d124-461e-b072-b81f44a9ec2f", - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - }, - { - "id": "97bf9dcd-57f1-43bc-a1c1-0deb18b6ce76", - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "preferred_username", - "jsonType.label": "String" - } - }, - { - "id": "15333cc5-0a83-4654-89e7-4ca8302f68e3", - "name": "updated at", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "updatedAt", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "updated_at", - "jsonType.label": "String" - } - }, - { - "id": "5cc7aad9-50a9-4eed-b2ff-d737b8fc2a6c", - "name": "zoneinfo", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "zoneinfo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "zoneinfo", - "jsonType.label": "String" - } - }, - { - "id": "34639bfe-ecbd-49eb-9814-f6aef0d896f0", - "name": "picture", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "picture", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "picture", - "jsonType.label": "String" - } - } - ] - }, - { - "id": "b8fb69e6-d80f-41b6-b66e-4b8665577b8c", - "name": "role_list", - "description": "SAML role list", - "protocol": "saml", - "attributes": { - "consent.screen.text": "${samlRoleListScopeConsentText}", - "display.on.consent.screen": "true" - }, - "protocolMappers": [ - { - "id": "c561def0-5fc9-4cc6-9cae-e3381892f08e", - "name": "role list", - "protocol": "saml", - "protocolMapper": "saml-role-list-mapper", - "consentRequired": false, - "config": { - "single": "false", - "attribute.nameformat": "Basic", - "attribute.name": "Role" - } - } - ] - }, - { - "id": "653b3af4-f3ca-4729-99c9-a9200d1111b6", - "name": "email", - "description": "OpenID Connect built-in scope: email", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${emailScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "30207dd4-99c3-4d30-b38b-fd280f95217e", - "name": "email verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "emailVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email_verified", - "jsonType.label": "boolean" - } - }, - { - "id": "0adb3d2b-b23b-4ae3-80a9-1a49a471ed27", - "name": "email", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "email", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email", - "jsonType.label": "String" - } - } - ] - }, - { - "id": "8c8ac374-fbdd-4f7e-9124-e037b8c1e6b3", - "name": "web-origins", - "description": "OpenID Connect scope for add allowed web origins to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "false", - "consent.screen.text": "" - }, - "protocolMappers": [ - { - "id": "6a8e23a3-b2fd-4115-94cc-9d14ed77a738", - "name": "allowed web origins", - "protocol": "openid-connect", - "protocolMapper": "oidc-allowed-origins-mapper", - "consentRequired": false, - "config": {} - } - ] - }, - { - "id": "d0a95f3b-5194-468d-bbc5-9039a466986d", - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "d1e42520-a94a-45d3-ab35-baa5fe882418", - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "id": "1f3f524a-91b4-47da-999b-fa55e2d75a43", - "name": "client roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-client-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "resource_access.${client_id}.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "id": "b007df7d-2624-421e-b10e-1e584d936cf5", - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - } - ] - }, - { - "id": "70c3e7a7-8857-4474-a81c-d0ed8fff0ff0", - "name": "phone", - "description": "OpenID Connect built-in scope: phone", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${phoneScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "3cce37b5-a759-47c5-bf2e-9e995fcd7743", - "name": "phone number verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumberVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number_verified", - "jsonType.label": "boolean" - } - }, - { - "id": "78be47fb-0e4b-4334-bc08-f0a2fdf89893", - "name": "phone number", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumber", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number", - "jsonType.label": "String" - } - } - ] - }, - { - "id": "9210c44a-442d-4c06-9ffe-ffb27257d769", - "name": "class", - "description": "Current academic level", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "Current academic level" - }, - "protocolMappers": [ - { - "id": "bd6b76d1-be71-4732-891e-d4696f09d94b", - "name": "class", - "protocol": "openid-connect", - "protocolMapper": "oidc-hardcoded-claim-mapper", - "consentRequired": false, - "config": { - "claim.value": "1", - "userinfo.token.claim": "true", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "consent.educationDetails", - "jsonType.label": "JSON", - "access.tokenResponse.claim": "false" - } - } - ] - }, - { - "id": "ceff28ae-4438-4bbb-adfc-47ca2425bf9a", - "name": "offline_access", - "description": "OpenID Connect built-in scope: offline_access", - "protocol": "openid-connect", - "attributes": { - "consent.screen.text": "${offlineAccessScopeConsentText}", - "display.on.consent.screen": "true" - } - } - ], - "defaultDefaultClientScopes": [ - "role_list", - "profile", - "email", - "roles", - "web-origins" - ], - "defaultOptionalClientScopes": [ - "offline_access", - "address", - "phone", - "microprofile-jwt" - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "xXSSProtection": "1; mode=block", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": {}, - "loginTheme": "ndear", - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "identityProviders": [], - "identityProviderMappers": [], - "components": { - "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ - { - "id": "3d60db9a-b74e-4ac7-a52e-ee52c029f047", - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "saml-role-list-mapper", - "oidc-usermodel-attribute-mapper", - "saml-user-property-mapper", - "oidc-usermodel-property-mapper", - "oidc-address-mapper", - "saml-user-attribute-mapper", - "oidc-full-name-mapper", - "oidc-sha256-pairwise-sub-mapper" - ] - } - }, - { - "id": "6ce20f73-1d49-4da9-a662-bb25da3f874c", - "name": "Max Clients Limit", - "providerId": "max-clients", - "subType": "anonymous", - "subComponents": {}, - "config": { - "max-clients": [ - "200" - ] - } - }, - { - "id": "199185ad-786f-4d1a-ada0-7e8ba9777467", - "name": "Consent Required", - "providerId": "consent-required", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "id": "9674d2a1-c1bb-484d-852f-5e3b8108b364", - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "id": "28792a7d-cc3c-46ee-a653-b611d45ff110", - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "id": "b4efac18-20d9-4d6a-aa47-919e295dbbb8", - "name": "Trusted Hosts", - "providerId": "trusted-hosts", - "subType": "anonymous", - "subComponents": {}, - "config": { - "host-sending-registration-request-must-match": [ - "true" - ], - "client-uris-must-match": [ - "true" - ] - } - }, - { - "id": "99a4426d-dae8-412e-84b5-fcc411ffce83", - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "oidc-address-mapper", - "saml-user-property-mapper", - "oidc-sha256-pairwise-sub-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-full-name-mapper", - "oidc-usermodel-property-mapper", - "saml-user-attribute-mapper", - "saml-role-list-mapper" - ] - } - }, - { - "id": "cc90e400-8359-4c5d-8486-259d84a2db89", - "name": "Full Scope Disabled", - "providerId": "scope", - "subType": "anonymous", - "subComponents": {}, - "config": {} - } - ], - "org.keycloak.keys.KeyProvider": [ - { - "id": "daa93bb0-bb8c-4e1a-a617-e05e2f6ec1f0", - "name": "hmac-generated", - "providerId": "hmac-generated", - "subComponents": {}, - "config": { - "priority": [ - "100" - ], - "algorithm": [ - "HS256" - ] - } - }, - { - "id": "eb178d96-4d0b-4b34-94a1-f76141cb8a9d", - "name": "aes-generated", - "providerId": "aes-generated", - "subComponents": {}, - "config": { - "priority": [ - "100" - ] - } - }, - { - "id": "cb7c7891-4bee-433a-812f-1d56c34c2e29", - "name": "rsa-generated", - "providerId": "rsa-generated", - "subComponents": {}, - "config": { - "priority": [ - "100" - ] - } - } - ] - }, - "internationalizationEnabled": false, - "supportedLocales": [ - "" - ], - "authenticationFlows": [ - { - "id": "0ab74575-c2f2-4eb4-a47a-06593591f634", - "alias": "Account verification options", - "description": "Method with which to verity the existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-email-verification", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "ALTERNATIVE", - "priority": 20, - "flowAlias": "Verify Existing Account by Re-authentication", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "2d4a7e37-27a0-4011-9e69-48c97d0ffb66", - "alias": "Authentication Options", - "description": "Authentication options.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "basic-auth", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth-otp", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "cbc1adc7-e24e-4091-bcfa-56837ee331b3", - "alias": "Browser - Conditional OTP", - "description": "Flow to determine if the OTP is required for the authentication", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "conditional-user-configured", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "f3900b3d-0495-484e-87a0-d340b921ed2d", - "alias": "Direct Grant - Conditional OTP", - "description": "Flow to determine if the OTP is required for the authentication", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "conditional-user-configured", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-otp", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "c903ba49-d1bf-469b-b251-df18607d7cea", - "alias": "First broker login - Conditional OTP", - "description": "Flow to determine if the OTP is required for the authentication", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "conditional-user-configured", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "f6821ccf-6173-422e-acfe-daf793a6a7f5", - "alias": "Handle Existing Account", - "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-confirm-link", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "REQUIRED", - "priority": 20, - "flowAlias": "Account verification options", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "db722948-38c7-44df-8855-22e63530c5b7", - "alias": "Reset - Conditional OTP", - "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "conditional-user-configured", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-otp", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "82428cc8-feb0-47af-afee-8dbd49f21e78", - "alias": "User creation or linking", - "description": "Flow for the existing/non-existing user alternatives", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "create unique user config", - "authenticator": "idp-create-user-if-unique", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "ALTERNATIVE", - "priority": 20, - "flowAlias": "Handle Existing Account", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "e6e7205e-f8ab-4b01-9653-81915269ecce", - "alias": "Verify Existing Account by Re-authentication", - "description": "Reauthentication of existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-username-password-form", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "CONDITIONAL", - "priority": 20, - "flowAlias": "First broker login - Conditional OTP", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "c7d2defc-aebe-463f-95f5-a18dd698285d", - "alias": "browser", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "forms", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "f2a2747d-ed5f-4489-bbb7-5f7a6028b306", - "alias": "clients", - "description": "Base authentication for clients", - "providerId": "client-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "client-secret", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-jwt", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-secret-jwt", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-x509", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "26526ac7-6139-40de-8a4b-84a56692a474", - "alias": "direct grant", - "description": "OpenID Connect Resource Owner Grant", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "direct-grant-validate-username", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-password", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "CONDITIONAL", - "priority": 30, - "flowAlias": "Direct Grant - Conditional OTP", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "4d512dcb-80a8-40ad-b68b-60d0e932d25e", - "alias": "docker auth", - "description": "Used by Docker clients to authenticate against the IDP", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "docker-http-basic-authenticator", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "749b512f-9f43-446a-a951-72e4207bb107", - "alias": "first broker login", - "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "review profile config", - "authenticator": "idp-review-profile", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "REQUIRED", - "priority": 20, - "flowAlias": "User creation or linking", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "09cbc2f5-050e-4a93-b40f-7489e43d0850", - "alias": "forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-username-password-form", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "CONDITIONAL", - "priority": 20, - "flowAlias": "Browser - Conditional OTP", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "7831c6d0-f46f-489e-944c-8e3b23733345", - "alias": "http challenge", - "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "no-cookie-redirect", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "REQUIRED", - "priority": 20, - "flowAlias": "Authentication Options", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "d8950fad-3c86-443f-a475-f06225af749e", - "alias": "mobile login", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": false, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "mobile-otp-login", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "authenticatorFlow": false, - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "mobile login forms", - "userSetupAllowed": false, - "autheticatorFlow": true - }, - { - "authenticator": "auth-spnego", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 31, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "8a71acbd-1771-4a44-b615-12429028d86a", - "alias": "mobile login forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": false, - "authenticationExecutions": [ - { - "authenticator": "mobile-otp-login", - "authenticatorFlow": false, - "requirement": "CONDITIONAL", - "priority": 0, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "13b66a32-c3d8-43f1-8ba5-287b978f3050", - "alias": "registration", - "description": "registration flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-page-form", - "authenticatorFlow": true, - "requirement": "REQUIRED", - "priority": 10, - "flowAlias": "registration form", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "d3695198-d866-46eb-a4a6-c053987a5505", - "alias": "registration form", - "description": "registration form", - "providerId": "form-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-user-creation", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-profile-action", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-password-action", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 50, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-recaptcha-action", - "authenticatorFlow": false, - "requirement": "DISABLED", - "priority": 60, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "id": "7784ee5f-3379-4f89-ac74-38b4f4880eac", - "alias": "reset credentials", - "description": "Reset credentials for a user if they forgot their password or something", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "reset-credentials-choose-user", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-credential-email", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-password", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorFlow": true, - "requirement": "CONDITIONAL", - "priority": 40, - "flowAlias": "Reset - Conditional OTP", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "id": "e5c57bc0-53c4-4b6a-ab76-f82acf64d118", - "alias": "saml ecp", - "description": "SAML ECP Profile Authentication Flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "http-basic-authenticator", - "authenticatorFlow": false, - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - } - ], - "authenticatorConfig": [ - { - "id": "61def636-cc77-4ce2-af3b-07c71510e4e4", - "alias": "create unique user config", - "config": { - "require.password.update.after.registration": "false" - } - }, - { - "id": "48aa1005-d4a6-4f89-af58-a7b8effd66c5", - "alias": "review profile config", - "config": { - "update.profile.on.first.login": "missing" - } - } - ], - "requiredActions": [ - { - "alias": "CONFIGURE_TOTP", - "name": "Configure OTP", - "providerId": "CONFIGURE_TOTP", - "enabled": true, - "defaultAction": false, - "priority": 10, - "config": {} - }, - { - "alias": "terms_and_conditions", - "name": "Terms and Conditions", - "providerId": "terms_and_conditions", - "enabled": false, - "defaultAction": false, - "priority": 20, - "config": {} - }, - { - "alias": "UPDATE_PASSWORD", - "name": "Update Password", - "providerId": "UPDATE_PASSWORD", - "enabled": true, - "defaultAction": false, - "priority": 30, - "config": {} - }, - { - "alias": "UPDATE_PROFILE", - "name": "Update Profile", - "providerId": "UPDATE_PROFILE", - "enabled": true, - "defaultAction": false, - "priority": 40, - "config": {} - }, - { - "alias": "VERIFY_EMAIL", - "name": "Verify Email", - "providerId": "VERIFY_EMAIL", - "enabled": true, - "defaultAction": false, - "priority": 50, - "config": {} - }, - { - "alias": "delete_account", - "name": "Delete Account", - "providerId": "delete_account", - "enabled": false, - "defaultAction": false, - "priority": 60, - "config": {} - }, - { - "alias": "update_user_locale", - "name": "Update User Locale", - "providerId": "update_user_locale", - "enabled": true, - "defaultAction": false, - "priority": 1000, - "config": {} - } - ], - "browserFlow": "mobile login", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "cibaBackchannelTokenDeliveryMode": "poll", - "cibaExpiresIn": "120", - "cibaAuthRequestedUserHint": "login_hint", - "oauth2DeviceCodeLifespan": "600", - "clientOfflineSessionMaxLifespan": "0", - "oauth2DevicePollingInterval": "600", - "clientSessionIdleTimeout": "600", - "clientSessionMaxLifespan": "600", - "frontendUrl": "", - "clientOfflineSessionIdleTimeout": "0", - "cibaInterval": "5" - }, - "keycloakVersion": "14.0.0", - "userManagedAccessAllowed": false, - "clientProfiles": { - "profiles": [] - }, - "clientPolicies": { - "policies": [] - } + "id": "sunbird-rc", + "realm": "sunbird-rc", + "displayName": "Sunbird Rc Core", + "notBefore": 0, + "defaultSignatureAlgorithm": "RS256", + "revokeRefreshToken": false, + "refreshTokenMaxReuse": 0, + "accessTokenLifespan": 300, + "accessTokenLifespanForImplicitFlow": 900, + "ssoSessionIdleTimeout": 1800, + "ssoSessionMaxLifespan": 36000, + "ssoSessionIdleTimeoutRememberMe": 0, + "ssoSessionMaxLifespanRememberMe": 0, + "offlineSessionIdleTimeout": 2592000, + "offlineSessionMaxLifespanEnabled": false, + "offlineSessionMaxLifespan": 5184000, + "clientSessionIdleTimeout": 0, + "clientSessionMaxLifespan": 0, + "clientOfflineSessionIdleTimeout": 0, + "clientOfflineSessionMaxLifespan": 0, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "oauth2DeviceCodeLifespan": 600, + "oauth2DevicePollingInterval": 5, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": false, + "rememberMe": false, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": false, + "editUsernameAllowed": false, + "bruteForceProtected": false, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "id": "8ce3f968-e251-4ea3-a815-c00f9a40815a", + "name": "default-roles-sunbird-rc", + "description": "${role_default-roles}", + "composite": true, + "composites": { + "realm": ["offline_access", "uma_authorization"], + "client": { + "account": ["view-profile", "manage-account"] + } + }, + "clientRole": false, + "containerId": "sunbird-rc", + "attributes": {} + }, + { + "id": "a772a1cd-7904-4e5c-a864-5041fa69d491", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "composite": false, + "clientRole": false, + "containerId": "sunbird-rc", + "attributes": {} + }, + { + "id": "42dba8cf-f483-4668-a087-cba46ed86ad2", + "name": "admin", + "composite": false, + "clientRole": false, + "containerId": "sunbird-rc", + "attributes": {} + }, + { + "id": "5fa4077d-1686-4506-97a6-5bce1bce59dc", + "name": "offline_access", + "description": "${role_offline-access}", + "composite": false, + "clientRole": false, + "containerId": "sunbird-rc", + "attributes": {} + } + ], + "client": { + "realm-management": [ + { + "id": "270ecc82-3249-475c-a851-d3ea162059b8", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "0de39ec0-7602-4aa2-b54d-ab12e9bdb76f", + "name": "view-events", + "description": "${role_view-events}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "4259031b-736e-49eb-9e70-4a312a48e211", + "name": "manage-clients", + "description": "${role_manage-clients}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "9887e071-49b0-464b-b6fe-a1c585a709c7", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "7d61f967-1dce-482f-96e5-9eff79eb4851", + "name": "realm-admin", + "description": "${role_realm-admin}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "view-events", + "manage-identity-providers", + "manage-clients", + "view-identity-providers", + "manage-authorization", + "view-users", + "manage-users", + "manage-events", + "manage-realm", + "impersonation", + "view-authorization", + "query-clients", + "create-client", + "view-clients", + "query-users", + "query-realms", + "view-realm", + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "e93b1761-fb32-46c5-bfa2-4b853c7b5573", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "bc32a137-07a1-40f0-b9fd-a6e64e27f99b", + "name": "manage-users", + "description": "${role_manage-users}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "4b5abd90-d6a2-4981-a50f-520292496f0b", + "name": "view-users", + "description": "${role_view-users}", + "composite": true, + "composites": { + "client": { + "realm-management": ["query-users", "query-groups"] + } + }, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "99d2ed5f-00a9-44ed-8b9f-bdd7ba3facb8", + "name": "manage-events", + "description": "${role_manage-events}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "3fbd2cd5-0698-490e-a52f-ef528d001a62", + "name": "manage-realm", + "description": "${role_manage-realm}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "9b8b4f1c-5ed6-49ca-bec3-0a9a4867ad26", + "name": "impersonation", + "description": "${role_impersonation}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "7e6341ff-a1d8-4400-af94-3a007a06706a", + "name": "view-authorization", + "description": "${role_view-authorization}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "ad0c87da-9f34-4992-a83a-f6b924f1944d", + "name": "query-clients", + "description": "${role_query-clients}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "badb0d4d-06da-45e8-a777-ef47f712d3ed", + "name": "create-client", + "description": "${role_create-client}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "f8f48f0f-bd2a-4cb7-9b77-af69b9805c25", + "name": "view-clients", + "description": "${role_view-clients}", + "composite": true, + "composites": { + "client": { + "realm-management": ["query-clients"] + } + }, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "ca0b1e94-6578-4295-abf4-ae99f7df7595", + "name": "query-users", + "description": "${role_query-users}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "ff7230eb-7dae-44a5-8f68-f68747f35589", + "name": "query-realms", + "description": "${role_query-realms}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "890d054b-86f9-49f5-8dd9-14f62aa956de", + "name": "view-realm", + "description": "${role_view-realm}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + }, + { + "id": "627f3f4c-58e3-49f3-9989-a05d4d0a8752", + "name": "query-groups", + "description": "${role_query-groups}", + "composite": false, + "clientRole": true, + "containerId": "961a8a92-1598-48ff-adee-1e5fee0df757", + "attributes": {} + } + ], + "security-admin-console": [], + "admin-api": [], + "admin-cli": [], + "account-console": [], + "broker": [ + { + "id": "2e9bfeff-129e-4072-9617-5847644aac24", + "name": "read-token", + "description": "${role_read-token}", + "composite": false, + "clientRole": true, + "containerId": "34e4506c-ea71-4248-a8da-cc2054e9007c", + "attributes": {} + } + ], + "account": [ + { + "id": "5694c2d0-6d02-4182-bb09-78f4f5f1ec2d", + "name": "delete-account", + "description": "${role_delete-account}", + "composite": false, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "0612622f-dae7-48f8-8985-fe7e5ab8acc7", + "name": "manage-consent", + "description": "${role_manage-consent}", + "composite": true, + "composites": { + "client": { + "account": ["view-consent"] + } + }, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "eeefbd57-94b8-4d7d-bf2f-075c39ccb746", + "name": "view-applications", + "description": "${role_view-applications}", + "composite": false, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "9e9165b9-1170-47ab-802a-aecffefb3ab7", + "name": "view-profile", + "description": "${role_view-profile}", + "composite": false, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "a8d0a100-e382-49ba-ac42-48dbf815a2de", + "name": "manage-account", + "description": "${role_manage-account}", + "composite": true, + "composites": { + "client": { + "account": ["manage-account-links"] + } + }, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "08772792-146d-4676-ba2d-ce56b0104263", + "name": "view-consent", + "description": "${role_view-consent}", + "composite": false, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + }, + { + "id": "0a2e7893-784e-47ef-ba35-4a26901350c0", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "composite": false, + "clientRole": true, + "containerId": "01326f76-7838-47fc-ae62-399a75c5ae38", + "attributes": {} + } + ], + "registry-frontend": [] + } + }, + "groups": [], + "defaultRole": { + "id": "8ce3f968-e251-4ea3-a815-c00f9a40815a", + "name": "default-roles-sunbird-rc", + "description": "${role_default-roles}", + "composite": true, + "clientRole": false, + "containerId": "sunbird-rc" + }, + "requiredCredentials": ["password"], + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "otpSupportedApplications": ["FreeOTP", "Google Authenticator"], + "webAuthnPolicyRpEntityName": "keycloak", + "webAuthnPolicySignatureAlgorithms": ["ES256"], + "webAuthnPolicyRpId": "", + "webAuthnPolicyAttestationConveyancePreference": "not specified", + "webAuthnPolicyAuthenticatorAttachment": "not specified", + "webAuthnPolicyRequireResidentKey": "not specified", + "webAuthnPolicyUserVerificationRequirement": "not specified", + "webAuthnPolicyCreateTimeout": 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyAcceptableAaguids": [], + "webAuthnPolicyPasswordlessRpEntityName": "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms": ["ES256"], + "webAuthnPolicyPasswordlessRpId": "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey": "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified", + "webAuthnPolicyPasswordlessCreateTimeout": 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyPasswordlessAcceptableAaguids": [], + "users": [ + { + "id": "3cc9ac60-b67d-4c57-8005-acd4d236b2dc", + "createdTimestamp": 1634296700339, + "username": "service-account-admin-api", + "enabled": true, + "totp": false, + "emailVerified": false, + "serviceAccountClientId": "admin-api", + "disableableCredentialTypes": [], + "requiredActions": [], + "realmRoles": ["default-roles-sunbird-rc"], + "clientRoles": { + "realm-management": ["manage-users", "manage-realm"] + }, + "notBefore": 0, + "groups": [] + } + ], + "scopeMappings": [ + { + "clientScope": "offline_access", + "roles": ["offline_access"] + } + ], + "clientScopeMappings": { + "account": [ + { + "client": "account-console", + "roles": ["manage-account"] + } + ] + }, + "clients": [ + { + "id": "01326f76-7838-47fc-ae62-399a75c5ae38", + "clientId": "account", + "name": "${client_account}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/sunbird-rc/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": ["/realms/sunbird-rc/account/*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "f871d6fc-d997-4ac6-99fe-d797955bc9f0", + "clientId": "account-console", + "name": "${client_account-console}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/sunbird-rc/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": ["/realms/sunbird-rc/account/*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "8ab32c51-9aa0-4e28-80bf-0d6b53151354", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + } + ], + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "25962708-6d45-47d9-8935-5db159234aac", + "clientId": "admin-api", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "*", + "http://localhost:4200/", + "http://localhost:4200/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "id.token.as.detached.signature": "false", + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "oauth2.device.authorization.grant.enabled": "false", + "backchannel.logout.revoke.offline.tokens": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "use.refresh.tokens": "true", + "exclude.session.state.from.auth.response": "false", + "oidc.ciba.grant.enabled": "false", + "saml.artifact.binding": "false", + "backchannel.logout.session.required": "true", + "client_credentials.use_refresh_token": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "84ae9d6c-424f-47f0-9d4d-f2e98fed7339", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "98406938-b8db-4992-8519-917054f6ed0e", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "90d6b17a-5a06-4546-8091-960301f8147e", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "b245b10b-606c-417c-bbc0-8f81a7a992a6", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "34e4506c-ea71-4248-a8da-cc2054e9007c", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "961a8a92-1598-48ff-adee-1e5fee0df757", + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "69c04ae8-6669-48e7-8234-08986a7f490d", + "clientId": "registry-frontend", + "name": "Registry Frontend", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": ["*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "id.token.as.detached.signature": "false", + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "login_theme": "sunbird-rc", + "oauth2.device.authorization.grant.enabled": "false", + "backchannel.logout.revoke.offline.tokens": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "use.refresh.tokens": "true", + "exclude.session.state.from.auth.response": "false", + "oidc.ciba.grant.enabled": "false", + "saml.artifact.binding": "false", + "backchannel.logout.session.required": "true", + "client_credentials.use_refresh_token": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "true", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "b777b14f-b0e8-4da5-a802-092803319cbe", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "rootUrl": "${authAdminUrl}", + "baseUrl": "/admin/sunbird-rc/console/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": ["/admin/sunbird-rc/console/*"], + "webOrigins": ["+"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "7160f35d-97d3-4730-9769-4b03b32e5191", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": ["web-origins", "roles", "profile", "email"], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + } + ], + "clientScopes": [ + { + "id": "b4695333-f842-4ef7-874e-99260e77b9cb", + "name": "microprofile-jwt", + "description": "Microprofile - JWT built-in scope", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + }, + "protocolMappers": [ + { + "id": "fc23d4b8-76c5-4e59-9305-10846b8bcefe", + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "user.attribute": "foo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "jsonType.label": "String" + } + }, + { + "id": "08f06ba5-3e60-4a0a-aaf9-f70bfc7ae99e", + "name": "upn", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "upn", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "e28227ee-cb54-4557-8908-01864f80055f", + "name": "roles", + "description": "OpenID Connect scope for add user roles to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "true", + "consent.screen.text": "${rolesScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "364a632f-b66a-4ca4-8bbe-ec2ce1af9df8", + "name": "realm roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "realm_access.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "id": "42cad815-4de0-4b67-abca-7f7aaf55e589", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + }, + { + "id": "e3302def-d387-465c-a420-7ab01570e94a", + "name": "client roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "resource_access.${client_id}.roles", + "jsonType.label": "String", + "multivalued": "true" + } + } + ] + }, + { + "id": "63a3cb24-b124-428e-ac0f-253eb1fe485d", + "name": "address", + "description": "OpenID Connect built-in scope: address", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${addressScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "2eb041ca-970a-45fd-a167-2a497579bc8c", + "name": "address", + "protocol": "openid-connect", + "protocolMapper": "oidc-address-mapper", + "consentRequired": false, + "config": { + "user.attribute.formatted": "formatted", + "user.attribute.country": "country", + "user.attribute.postal_code": "postal_code", + "userinfo.token.claim": "true", + "user.attribute.street": "street", + "id.token.claim": "true", + "user.attribute.region": "region", + "access.token.claim": "true", + "user.attribute.locality": "locality" + } + } + ] + }, + { + "id": "2c02e9ce-7d86-4a5b-84b8-cf93114ddf26", + "name": "role_list", + "description": "SAML role list", + "protocol": "saml", + "attributes": { + "consent.screen.text": "${samlRoleListScopeConsentText}", + "display.on.consent.screen": "true" + }, + "protocolMappers": [ + { + "id": "2d39b55e-46c4-4dec-bd83-f081c708f544", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + } + ] + }, + { + "id": "e869fffd-f801-492d-a6c7-d6c6143817e5", + "name": "phone", + "description": "OpenID Connect built-in scope: phone", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${phoneScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "daeb863b-4773-4668-98fb-403e93414eb2", + "name": "phone number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumber", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number", + "jsonType.label": "String" + } + }, + { + "id": "a98b9f93-ec39-4f3c-acb7-cd92161e3717", + "name": "phone number verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumberVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number_verified", + "jsonType.label": "boolean" + } + } + ] + }, + { + "id": "c59a379a-3934-4e6f-be20-1803b0786d97", + "name": "email", + "description": "OpenID Connect built-in scope: email", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${emailScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "0a299a91-277c-4f38-95e7-6c520f892b63", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "d51531b3-a8ea-44e2-a48f-69991f9166cc", + "name": "email verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "emailVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email_verified", + "jsonType.label": "boolean" + } + } + ] + }, + { + "id": "b4b33a89-01db-468e-9a4e-c5ac58304fed", + "name": "offline_access", + "description": "OpenID Connect built-in scope: offline_access", + "protocol": "openid-connect", + "attributes": { + "consent.screen.text": "${offlineAccessScopeConsentText}", + "display.on.consent.screen": "true" + } + }, + { + "id": "d1727e08-fb90-49ce-bb7e-d7a55a50ee64", + "name": "profile", + "description": "OpenID Connect built-in scope: profile", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${profileScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "564ae79d-e505-416c-b794-ddd3a3c21fde", + "name": "middle name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "middleName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "middle_name", + "jsonType.label": "String" + } + }, + { + "id": "986d2d9e-0d0d-4317-92b3-a7a8d9bec4de", + "name": "updated at", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "updatedAt", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "updated_at", + "jsonType.label": "String" + } + }, + { + "id": "e14ec2e9-0d24-4960-8779-00f769ccc01b", + "name": "gender", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "gender", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "gender", + "jsonType.label": "String" + } + }, + { + "id": "8f044609-b615-4522-b9e7-8361cb08b0b3", + "name": "profile", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "profile", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "profile", + "jsonType.label": "String" + } + }, + { + "id": "341b838d-ba26-4280-b0af-3e5d3403c938", + "name": "zoneinfo", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "zoneinfo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "zoneinfo", + "jsonType.label": "String" + } + }, + { + "id": "26a17e7e-1a6e-439f-a54a-05a63d1c91fb", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "2489b2c0-5b3a-4404-8428-be4ce653da72", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "8c7e1d96-bf79-42e6-9360-b5e7b8dddc8d", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "01f959d8-123f-4263-ad6e-386e8b4d0e05", + "name": "nickname", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "nickname", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "nickname", + "jsonType.label": "String" + } + }, + { + "id": "b47a30d6-3c49-4bbe-b15e-b0eb6cffc0f3", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "2cc8166d-6d77-4a85-9945-bc22b0f550e3", + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "picture", + "jsonType.label": "String" + } + }, + { + "id": "1d87a800-cc11-4d85-aa76-8a6d828e2269", + "name": "website", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "website", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "website", + "jsonType.label": "String" + } + }, + { + "id": "42cc1538-f83a-4a94-b5a5-d16b80824a02", + "name": "birthdate", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "birthdate", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "birthdate", + "jsonType.label": "String" + } + }, + { + "id": "13ff6325-822e-4087-9e74-086de77fe89e", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "e501527e-dec8-4fde-a539-8e77d86b5081", + "name": "web-origins", + "description": "OpenID Connect scope for add allowed web origins to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "false", + "consent.screen.text": "" + }, + "protocolMappers": [ + { + "id": "b4b519d8-070d-4dab-854e-d6e3b2b36205", + "name": "allowed web origins", + "protocol": "openid-connect", + "protocolMapper": "oidc-allowed-origins-mapper", + "consentRequired": false, + "config": {} + } + ] + } + ], + "defaultDefaultClientScopes": [ + "role_list", + "profile", + "email", + "roles", + "web-origins" + ], + "defaultOptionalClientScopes": [ + "offline_access", + "address", + "phone", + "microprofile-jwt" + ], + "browserSecurityHeaders": { + "contentSecurityPolicyReportOnly": "", + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "xXSSProtection": "1; mode=block", + "strictTransportSecurity": "max-age=31536000; includeSubDomains" + }, + "smtpServer": {}, + "eventsEnabled": false, + "eventsListeners": ["jboss-logging"], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "identityProviders": [], + "identityProviderMappers": [], + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "id": "ed42958b-6e78-42a9-9f40-2e40bd6c8dd0", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-sha256-pairwise-sub-mapper", + "oidc-usermodel-attribute-mapper", + "saml-user-attribute-mapper", + "saml-user-property-mapper", + "oidc-usermodel-property-mapper", + "oidc-address-mapper", + "saml-role-list-mapper", + "oidc-full-name-mapper" + ] + } + }, + { + "id": "572219a7-3053-4940-87c5-ad94a6fb6dd3", + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": ["true"], + "client-uris-must-match": ["true"] + } + }, + { + "id": "8704a420-bf90-4e12-9e33-d21f39a2385b", + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": ["200"] + } + }, + { + "id": "8cf98455-916b-487a-8322-3f5d283400c2", + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "0b43488d-108b-41f5-ab6d-56a4ac8ff63c", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "saml-role-list-mapper", + "oidc-address-mapper", + "saml-user-attribute-mapper", + "oidc-usermodel-property-mapper", + "oidc-sha256-pairwise-sub-mapper", + "saml-user-property-mapper", + "oidc-full-name-mapper", + "oidc-usermodel-attribute-mapper" + ] + } + }, + { + "id": "6f0ebf9b-900a-4ca9-8fea-90719f218689", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allow-default-scopes": ["true"] + } + }, + { + "id": "b5a486b3-abf9-49a1-8dc6-dc5e20776681", + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "be43420e-8ffc-4f53-b745-f2f0cd88f000", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allow-default-scopes": ["true"] + } + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "id": "f749bd77-72f2-4dc4-a65e-dd89b255f12f", + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "priority": ["100"] + } + }, + { + "id": "a541cbb1-8a27-4061-a389-9f24ba1c2eb1", + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "priority": ["100"], + "algorithm": ["HS256"] + } + }, + { + "id": "18504bf7-63f1-4848-b565-6348fa6b0048", + "name": "aes-generated", + "providerId": "aes-generated", + "subComponents": {}, + "config": { + "priority": ["100"] + } + } + ] + }, + "internationalizationEnabled": false, + "supportedLocales": [], + "authenticationFlows": [ + { + "id": "497d8386-9a74-4b7b-a4e6-78bbbbb5d795", + "alias": "Account verification options", + "description": "Method with which to verity the existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-email-verification", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "d964973c-2106-4db3-a814-f7a34ae7a1ce", + "alias": "Authentication Options", + "description": "Authentication options.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "basic-auth", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "basic-auth-otp", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "3ff1b250-85b1-4709-8719-3eabcb34493f", + "alias": "Browser - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "43f683be-52e7-43cd-aa9e-6318b8079ad0", + "alias": "Direct Grant - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "5195e46e-b2c3-49e3-8987-db8b19c45fc5", + "alias": "First broker login - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "aca5480d-842c-4fa9-aff1-b8af8d51d82a", + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Account verification options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "66a00ea9-7ec1-4450-905a-14b7f3f8e4bf", + "alias": "Reset - Conditional OTP", + "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "a24445a4-1988-4b5b-bde6-fa36dbd07e03", + "alias": "User creation or linking", + "description": "Flow for the existing/non-existing user alternatives", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "31c2bc3b-6eb1-4c4f-8464-3528f7445ef7", + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "First broker login - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "4ccc8da9-0e1e-4f30-99c0-e2139f671a80", + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "fa1183d1-af7a-40dd-ba85-d7d37867639c", + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-secret-jwt", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-x509", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "f5b5e49b-7cc9-4011-b9fa-60f0ef65e735", + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 30, + "flowAlias": "Direct Grant - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "5cf727d2-e25a-4c88-a55b-4eea9134adb1", + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "3ec4f009-2f16-464b-8feb-a0bdc0dad195", + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "User creation or linking", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "a695a5e0-326f-4658-8518-a1769d97ad5f", + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "Browser - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "4611e0a9-a6a4-4e32-8500-e68877b464b1", + "alias": "http challenge", + "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "no-cookie-redirect", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Authentication Options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "55be727b-a17b-40c5-a5c3-c2d72c7f54cb", + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "00ec3b72-3abb-4db3-ad2f-595bc2f7e086", + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "82e4f3a3-744b-4d8a-8785-6eabaf9e05c9", + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 40, + "flowAlias": "Reset - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "0c0312b2-db7c-433c-ab15-20b18bfb5f4a", + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "id": "ee0faa63-999c-42e6-8189-c22a5cc14dc5", + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "id": "506eed8f-88c9-4978-b13a-886f1efc45c0", + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "priority": 10, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": false, + "defaultAction": false, + "priority": 20, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "priority": 30, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "priority": 40, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "priority": 50, + "config": {} + }, + { + "alias": "delete_account", + "name": "Delete Account", + "providerId": "delete_account", + "enabled": false, + "defaultAction": false, + "priority": 60, + "config": {} + }, + { + "alias": "update_user_locale", + "name": "Update User Locale", + "providerId": "update_user_locale", + "enabled": true, + "defaultAction": false, + "priority": 1000, + "config": {} + } + ], + "browserFlow": "browser", + "registrationFlow": "registration", + "directGrantFlow": "direct grant", + "resetCredentialsFlow": "reset credentials", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "cibaBackchannelTokenDeliveryMode": "poll", + "cibaExpiresIn": "120", + "cibaAuthRequestedUserHint": "login_hint", + "oauth2DeviceCodeLifespan": "600", + "oauth2DevicePollingInterval": "5", + "clientOfflineSessionMaxLifespan": "0", + "clientSessionIdleTimeout": "0", + "clientSessionMaxLifespan": "0", + "clientOfflineSessionIdleTimeout": "0", + "cibaInterval": "5" + }, + "keycloakVersion": "14.0.0", + "userManagedAccessAllowed": false, + "clientProfiles": { + "profiles": [] + }, + "clientPolicies": { + "policies": [] + } } diff --git a/tools/cli/contributing.md b/tools/cli/contributing.md index bb1ebe6f5..7d5e38aba 100644 --- a/tools/cli/contributing.md +++ b/tools/cli/contributing.md @@ -73,7 +73,7 @@ v16.13.0 Once NodeJS is installed, run the following in terminal to install PNPM: ```sh -$ sudo npm install --global pnpm +$ sudo npm install --global pnpm@6.20.1 ``` Run `pnpm --version` in the terminal if PNPM has been installed correctly: diff --git a/tools/cli/package.json b/tools/cli/package.json index 60abbdfb3..ca9f46186 100644 --- a/tools/cli/package.json +++ b/tools/cli/package.json @@ -3,7 +3,14 @@ "version": "1.6.6", "description": "A CLI to setup and manage Sunbird RC registry instances", "author": "Vedant K ", - "keywords": ["registry-cli", "sbrc", "sb-rc", "sunbird-rc", "verifiable-credentials", "registry"], + "keywords": [ + "registry-cli", + "sbrc", + "sb-rc", + "sunbird-rc", + "verifiable-credentials", + "registry" + ], "contributors": [ { "name": "Tejash JL", @@ -40,6 +47,7 @@ "dependencies": { "@types/node": "16.11.21", "@types/update-notifier": "5.1.0", + "apisauce": "2.1.5", "extract-zip": "2.0.1", "gluegun": "4.7.1", "update-notifier": "5.1.0", @@ -61,7 +69,7 @@ }, "pnpm": { "overrides": { - "ansi-regex@>2.1.1 <5.0.1": ">=5.0.1", + "ansi-regex@>3.0.1 <5.0.1": ">=5.0.1", "yargs-parser@>=16.0.0 <18.1.2": ">=18.1.2", "follow-redirects@<1.14.7": ">=1.14.7" } diff --git a/tools/cli/pnpm-lock.yaml b/tools/cli/pnpm-lock.yaml index 9b7aed869..a231538b9 100644 --- a/tools/cli/pnpm-lock.yaml +++ b/tools/cli/pnpm-lock.yaml @@ -1,13 +1,14 @@ lockfileVersion: 5.3 overrides: - ansi-regex@>2.1.1 <5.0.1: '>=5.0.1' + ansi-regex@>3.0.1 <5.0.1: '>=5.0.1' yargs-parser@>=16.0.0 <18.1.2: '>=18.1.2' follow-redirects@<1.14.7: '>=1.14.7' specifiers: '@types/node': 16.11.21 '@types/update-notifier': 5.1.0 + apisauce: 2.1.5 del-cli: ^4.0.1 extract-zip: 2.0.1 gluegun: 4.7.1 @@ -22,6 +23,7 @@ specifiers: dependencies: '@types/node': 16.11.21 '@types/update-notifier': 5.1.0 + apisauce: 2.1.5 extract-zip: 2.0.1 gluegun: 4.7.1 update-notifier: 5.1.0 @@ -36,87 +38,61 @@ devDependencies: typescript: 4.5.5 packages: + /@babel/code-frame/7.16.0: - resolution: - { - integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==} + engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.16.0 /@babel/helper-validator-identifier/7.15.7: - resolution: - { - integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==} + engines: {node: '>=6.9.0'} /@babel/highlight/7.16.0: - resolution: - { - integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.15.7 chalk: 2.4.2 js-tokens: 4.0.0 /@cspotcode/source-map-consumer/0.8.0: - resolution: - { - integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==, - } - engines: { node: '>= 12' } + resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} + engines: {node: '>= 12'} dev: true /@cspotcode/source-map-support/0.7.0: - resolution: - { - integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} + engines: {node: '>=12'} dependencies: '@cspotcode/source-map-consumer': 0.8.0 dev: true /@nodelib/fs.scandir/2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat/2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk/1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 dev: true /@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7: - resolution: - { - integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} peerDependencies: rxjs: '*' zen-observable: '*' @@ -131,80 +107,50 @@ packages: dev: true /@sindresorhus/is/0.14.0: - resolution: - { - integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} /@sindresorhus/is/2.1.1: - resolution: - { - integrity: sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==} + engines: {node: '>=10'} dev: true /@sindresorhus/is/4.2.0: - resolution: - { - integrity: sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==} + engines: {node: '>=10'} dev: true /@szmarczak/http-timer/1.1.2: - resolution: - { - integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} dependencies: defer-to-connect: 1.1.3 /@szmarczak/http-timer/4.0.6: - resolution: - { - integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 dev: true /@tsconfig/node10/1.0.8: - resolution: - { - integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==, - } + resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} dev: true /@tsconfig/node12/1.0.9: - resolution: - { - integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==, - } + resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} dev: true /@tsconfig/node14/1.0.1: - resolution: - { - integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==, - } + resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} dev: true /@tsconfig/node16/1.0.2: - resolution: - { - integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==, - } + resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} dev: true /@types/cacheable-request/6.0.2: - resolution: - { - integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==, - } + resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.3 @@ -213,78 +159,48 @@ packages: dev: true /@types/configstore/5.0.1: - resolution: - { - integrity: sha512-c/QCznvk7bLKGhHETj29rqKufui3jaAxjBhK4R2zUrMG5UG0qTwfWYxBoUbH8JCyDjdCWMIxPJ7/Fdz1UcAnWg==, - } + resolution: {integrity: sha512-c/QCznvk7bLKGhHETj29rqKufui3jaAxjBhK4R2zUrMG5UG0qTwfWYxBoUbH8JCyDjdCWMIxPJ7/Fdz1UcAnWg==} dev: false /@types/http-cache-semantics/4.0.1: - resolution: - { - integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==, - } + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true /@types/keyv/3.1.3: - resolution: - { - integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==, - } + resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==} dependencies: '@types/node': 16.11.21 dev: true /@types/minimist/1.2.2: - resolution: - { - integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, - } + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true /@types/node/16.11.21: - resolution: - { - integrity: sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==, - } + resolution: {integrity: sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==} /@types/normalize-package-data/2.4.1: - resolution: - { - integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, - } + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true /@types/parse-json/4.0.0: - resolution: - { - integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, - } + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} /@types/responselike/1.0.0: - resolution: - { - integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==, - } + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: '@types/node': 16.11.21 dev: true /@types/update-notifier/5.1.0: - resolution: - { - integrity: sha512-aGY5pH1Q/DcToKXl4MCj1c0uDUB+zSVFDRCI7Q7js5sguzBTqJV/5kJA2awofbtWYF3xnon1TYdZYnFditRPtQ==, - } + resolution: {integrity: sha512-aGY5pH1Q/DcToKXl4MCj1c0uDUB+zSVFDRCI7Q7js5sguzBTqJV/5kJA2awofbtWYF3xnon1TYdZYnFditRPtQ==} dependencies: '@types/configstore': 5.0.1 boxen: 4.2.0 dev: false /@types/yauzl/2.9.2: - resolution: - { - integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==, - } + resolution: {integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==} requiresBuild: true dependencies: '@types/node': 16.11.21 @@ -292,116 +208,84 @@ packages: optional: true /acorn-walk/8.2.0: - resolution: - { - integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} dev: true /acorn/8.5.0: - resolution: - { - integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /aggregate-error/3.1.0: - resolution: - { - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true /ansi-align/3.0.1: - resolution: - { - integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==, - } + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 /ansi-colors/3.2.4: - resolution: - { - integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} dev: false /ansi-escapes/3.2.0: - resolution: - { - integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} dev: true /ansi-escapes/4.3.2: - resolution: - { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true /ansi-regex/2.1.1: - resolution: { integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} + engines: {node: '>=0.10.0'} dev: true + /ansi-regex/3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + /ansi-regex/5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} /ansi-styles/2.2.1: - resolution: { integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=} + engines: {node: '>=0.10.0'} dev: true /ansi-styles/3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 /ansi-styles/4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 /any-observable/0.3.0: - resolution: - { - integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} dev: true /any-observable/0.5.1_rxjs@6.6.7: - resolution: - { - integrity: sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==} + engines: {node: '>=8'} peerDependencies: rxjs: '*' zen-observable: '*' @@ -415,10 +299,7 @@ packages: dev: true /apisauce/2.1.5: - resolution: - { - integrity: sha512-bkMlz0ZUnyS8vDigej9UBYo5dne9/bQrkgIiIkGaiDHF6e5OxhYRLJDYu65V/Ox86tmWVwepIntAoTmk4Db0Hg==, - } + resolution: {integrity: sha512-bkMlz0ZUnyS8vDigej9UBYo5dne9/bQrkgIiIkGaiDHF6e5OxhYRLJDYu65V/Ox86tmWVwepIntAoTmk4Db0Hg==} dependencies: axios: 0.21.4 transitivePeerDependencies: @@ -426,42 +307,30 @@ packages: dev: false /app-module-path/2.2.0: - resolution: { integrity: sha1-ZBqlXft9am8KgUHEucCqULbCTdU= } + resolution: {integrity: sha1-ZBqlXft9am8KgUHEucCqULbCTdU=} dev: false /arg/4.1.3: - resolution: - { - integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, - } + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true /array-union/2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /arrify/1.0.1: - resolution: { integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} + engines: {node: '>=0.10.0'} dev: true /async-exit-hook/2.0.1: - resolution: - { - integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} dev: true /axios/0.21.4: - resolution: - { - integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, - } + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: follow-redirects: 1.14.5 transitivePeerDependencies: @@ -469,17 +338,11 @@ packages: dev: false /balanced-match/1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /boxen/4.2.0: - resolution: - { - integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} + engines: {node: '>=8'} dependencies: ansi-align: 3.0.1 camelcase: 5.3.1 @@ -492,11 +355,8 @@ packages: dev: false /boxen/5.1.2: - resolution: - { - integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} dependencies: ansi-align: 3.0.1 camelcase: 6.2.0 @@ -508,49 +368,37 @@ packages: wrap-ansi: 7.0.0 /brace-expansion/1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 /braces/3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true /buffer-crc32/0.2.13: - resolution: { integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= } + resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} dev: false /builtins/1.0.3: - resolution: { integrity: sha1-y5T662HIaWRR2zZTThQi+U8K7og= } + resolution: {integrity: sha1-y5T662HIaWRR2zZTThQi+U8K7og=} dev: true /cacheable-lookup/2.0.1: - resolution: - { - integrity: sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==} + engines: {node: '>=10'} dependencies: '@types/keyv': 3.1.3 keyv: 4.0.4 dev: true /cacheable-request/6.1.0: - resolution: - { - integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} dependencies: clone-response: 1.0.2 get-stream: 5.2.0 @@ -561,11 +409,8 @@ packages: responselike: 1.0.2 /cacheable-request/7.0.2: - resolution: - { - integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} + engines: {node: '>=8'} dependencies: clone-response: 1.0.2 get-stream: 5.2.0 @@ -577,28 +422,19 @@ packages: dev: true /call-bind/1.0.2: - resolution: - { - integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, - } + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.1 dev: true /callsites/3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} /camelcase-keys/6.2.2: - resolution: - { - integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 map-obj: 4.3.0 @@ -606,11 +442,8 @@ packages: dev: true /camelcase-keys/7.0.1: - resolution: - { - integrity: sha512-P331lEls98pW8JLyodNWfzuz91BEDVA4VpW2/SwXnyv2K495tq1N777xzDbFgnEigfA7UIY0xa6PwR/H9jijjA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-P331lEls98pW8JLyodNWfzuz91BEDVA4VpW2/SwXnyv2K495tq1N777xzDbFgnEigfA7UIY0xa6PwR/H9jijjA==} + engines: {node: '>=12'} dependencies: camelcase: 6.2.0 map-obj: 4.3.0 @@ -619,22 +452,16 @@ packages: dev: true /camelcase/5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} /camelcase/6.2.0: - resolution: - { - integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + engines: {node: '>=10'} /chalk/1.1.3: - resolution: { integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=} + engines: {node: '>=0.10.0'} dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 @@ -644,95 +471,65 @@ packages: dev: true /chalk/2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 /chalk/3.0.0: - resolution: - { - integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: false /chalk/4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 /chardet/0.7.0: - resolution: - { - integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, - } + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true /ci-info/2.0.0: - resolution: - { - integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, - } + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} /clean-stack/2.2.0: - resolution: - { - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} dev: true /cli-boxes/2.2.1: - resolution: - { - integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} /cli-cursor/2.1.0: - resolution: { integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= } - engines: { node: '>=4' } + resolution: {integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=} + engines: {node: '>=4'} dependencies: restore-cursor: 2.0.0 dev: true /cli-cursor/3.1.0: - resolution: - { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 /cli-spinners/2.6.1: - resolution: - { - integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} dev: false /cli-table3/0.5.1: - resolution: - { - integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} dependencies: object-assign: 4.1.1 string-width: 2.1.1 @@ -741,86 +538,65 @@ packages: dev: false /cli-truncate/0.2.1: - resolution: { integrity: sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=} + engines: {node: '>=0.10.0'} dependencies: slice-ansi: 0.0.4 string-width: 1.0.2 dev: true /cli-width/2.2.1: - resolution: - { - integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==, - } + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} dev: true /cli-width/3.0.0: - resolution: - { - integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} dev: true /clone-response/1.0.2: - resolution: { integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= } + resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} dependencies: mimic-response: 1.0.1 /clone/1.0.4: - resolution: { integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4= } - engines: { node: '>=0.8' } + resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} + engines: {node: '>=0.8'} dev: false /code-point-at/1.1.0: - resolution: { integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=} + engines: {node: '>=0.10.0'} dev: true /color-convert/1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 /color-convert/2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 /color-name/1.1.3: - resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} /color-name/1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} /colors/1.4.0: - resolution: - { - integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==, - } - engines: { node: '>=0.1.90' } + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} dev: false /concat-map/0.0.1: - resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} /configstore/5.0.1: - resolution: - { - integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 graceful-fs: 4.2.8 @@ -830,11 +606,8 @@ packages: xdg-basedir: 4.0.0 /cosmiconfig/6.0.0: - resolution: - { - integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 @@ -844,11 +617,8 @@ packages: dev: false /cosmiconfig/7.0.1: - resolution: - { - integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 @@ -858,18 +628,12 @@ packages: dev: true /create-require/1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, - } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true /cross-spawn/6.0.5: - resolution: - { - integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, - } - engines: { node: '>=4.8' } + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -879,36 +643,24 @@ packages: dev: true /cross-spawn/7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 /crypto-random-string/2.0.0: - resolution: - { - integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} /date-fns/1.30.1: - resolution: - { - integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==, - } + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} dev: true /debug/4.3.2: - resolution: - { - integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -919,85 +671,64 @@ packages: dev: false /decamelize-keys/1.1.0: - resolution: { integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} + engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 map-obj: 1.0.1 dev: true /decamelize/1.2.0: - resolution: { integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + engines: {node: '>=0.10.0'} dev: true /decamelize/5.0.1: - resolution: - { - integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} dev: true /decompress-response/3.3.0: - resolution: { integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= } - engines: { node: '>=4' } + resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} + engines: {node: '>=4'} dependencies: mimic-response: 1.0.1 /decompress-response/5.0.0: - resolution: - { - integrity: sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==} + engines: {node: '>=10'} dependencies: mimic-response: 2.1.0 dev: true /deep-extend/0.6.0: - resolution: - { - integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, - } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} /defaults/1.0.3: - resolution: { integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= } + resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} dependencies: clone: 1.0.4 dev: false /defer-to-connect/1.1.3: - resolution: - { - integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==, - } + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} /defer-to-connect/2.0.1: - resolution: - { - integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} dev: true /define-properties/1.1.3: - resolution: - { - integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + engines: {node: '>= 0.4'} dependencies: object-keys: 1.1.1 dev: true /del-cli/4.0.1: - resolution: - { - integrity: sha512-KtR/6cBfZkGDAP2NA7z+bP4p1OMob3wjN9mq13+SWvExx6jT9gFWfLgXEeX8J2B47OKeNCq9yTONmtryQ+m+6g==, - } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-KtR/6cBfZkGDAP2NA7z+bP4p1OMob3wjN9mq13+SWvExx6jT9gFWfLgXEeX8J2B47OKeNCq9yTONmtryQ+m+6g==} + engines: {node: '>=12.20'} hasBin: true dependencies: del: 6.0.0 @@ -1005,11 +736,8 @@ packages: dev: true /del/6.0.0: - resolution: - { - integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==} + engines: {node: '>=10'} dependencies: globby: 11.0.4 graceful-fs: 4.2.8 @@ -1022,97 +750,67 @@ packages: dev: true /diff/4.0.2: - resolution: - { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, - } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} dev: true /dir-glob/3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /dot-prop/5.3.0: - resolution: - { - integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 /dot-prop/6.0.1: - resolution: - { - integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} dependencies: is-obj: 2.0.0 dev: true /duplexer3/0.1.4: - resolution: { integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= } + resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} /ejs/2.7.4: - resolution: - { - integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==} + engines: {node: '>=0.10.0'} requiresBuild: true dev: false /elegant-spinner/1.0.1: - resolution: { integrity: sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=} + engines: {node: '>=0.10.0'} dev: true /emoji-regex/8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} /end-of-stream/1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, - } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 /enquirer/2.3.4: - resolution: - { - integrity: sha512-pkYrrDZumL2VS6VBGDhqbajCM2xpkUNLuKfGPjfKaSIBKYopQbqEFyrOkRMIb2HDR/rO1kGhEt/5twBwtzKBXw==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-pkYrrDZumL2VS6VBGDhqbajCM2xpkUNLuKfGPjfKaSIBKYopQbqEFyrOkRMIb2HDR/rO1kGhEt/5twBwtzKBXw==} + engines: {node: '>=8.6'} dependencies: ansi-colors: 3.2.4 dev: false /error-ex/1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 /es-abstract/1.19.1: - resolution: - { - integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 es-to-primitive: 1.2.1 @@ -1137,11 +835,8 @@ packages: dev: true /es-to-primitive/1.2.1: - resolution: - { - integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.4 is-date-object: 1.0.5 @@ -1149,38 +844,26 @@ packages: dev: true /escape-goat/2.1.1: - resolution: - { - integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} /escape-goat/3.0.0: - resolution: - { - integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} + engines: {node: '>=10'} dev: true /escape-string-regexp/1.0.5: - resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} /escape-string-regexp/4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true /execa/3.4.0: - resolution: - { - integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==, - } - engines: { node: ^8.12.0 || >=9.7.0 } + resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==} + engines: {node: ^8.12.0 || >=9.7.0} dependencies: cross-spawn: 7.0.3 get-stream: 5.2.0 @@ -1195,11 +878,8 @@ packages: dev: false /execa/5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -1213,11 +893,8 @@ packages: dev: true /external-editor/3.1.0: - resolution: - { - integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 @@ -1225,11 +902,8 @@ packages: dev: true /extract-zip/2.0.1: - resolution: - { - integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, - } - engines: { node: '>= 10.17.0' } + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} hasBin: true dependencies: debug: 4.3.2 @@ -1242,11 +916,8 @@ packages: dev: false /fast-glob/3.2.7: - resolution: - { - integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -1256,83 +927,65 @@ packages: dev: true /fastq/1.13.0: - resolution: - { - integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, - } + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true /fd-slicer/1.1.0: - resolution: { integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= } + resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} dependencies: pend: 1.2.0 dev: false /figures/1.7.0: - resolution: { integrity: sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 object-assign: 4.1.1 dev: true /figures/2.0.0: - resolution: { integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= } - engines: { node: '>=4' } + resolution: {integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=} + engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 dev: true /figures/3.2.0: - resolution: - { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 dev: true /fill-range/7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /find-up/4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up/5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true /follow-redirects/1.14.5: - resolution: - { - integrity: sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==} + engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: @@ -1341,31 +994,22 @@ packages: dev: false /fs-jetpack/2.4.0: - resolution: - { - integrity: sha512-S/o9Dd7K9A7gicVU32eT8G0kHcmSu0rCVdP79P0MWInKFb8XpTc8Syhoo66k9no+HDshtlh4pUJTws8X+8fdFQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-S/o9Dd7K9A7gicVU32eT8G0kHcmSu0rCVdP79P0MWInKFb8XpTc8Syhoo66k9no+HDshtlh4pUJTws8X+8fdFQ==} + engines: {node: '>=4'} dependencies: minimatch: 3.0.4 rimraf: 2.7.1 dev: false /fs.realpath/1.0.0: - resolution: { integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= } + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} /function-bind/1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, - } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true /get-intrinsic/1.1.1: - resolution: - { - integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==, - } + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -1373,61 +1017,43 @@ packages: dev: true /get-stream/4.1.0: - resolution: - { - integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} dependencies: pump: 3.0.0 /get-stream/5.2.0: - resolution: - { - integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} dependencies: pump: 3.0.0 /get-stream/6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} dev: true /get-symbol-description/1.0.0: - resolution: - { - integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 dev: true /github-url-from-git/1.5.0: - resolution: { integrity: sha1-+YX+3MCpqledyI16/waNVcxiUaA= } + resolution: {integrity: sha1-+YX+3MCpqledyI16/waNVcxiUaA=} dev: true /glob-parent/5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob/7.2.0: - resolution: - { - integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, - } + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1437,30 +1063,21 @@ packages: path-is-absolute: 1.0.1 /global-dirs/2.1.0: - resolution: - { - integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==} + engines: {node: '>=8'} dependencies: ini: 1.3.7 dev: true /global-dirs/3.0.0: - resolution: - { - integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + engines: {node: '>=10'} dependencies: ini: 2.0.0 /globby/11.0.4: - resolution: - { - integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -1471,10 +1088,7 @@ packages: dev: true /gluegun/4.7.1: - resolution: - { - integrity: sha512-5iLbLCU+jCf34zHrl+AKC39mDIpVKn/Z5B2uIS8TjHVaPBaDPnRD/VspiHy9dyF5mjr7Ogg1/gOt8yeWo7MEug==, - } + resolution: {integrity: sha512-5iLbLCU+jCf34zHrl+AKC39mDIpVKn/Z5B2uIS8TjHVaPBaDPnRD/VspiHy9dyF5mjr7Ogg1/gOt8yeWo7MEug==} hasBin: true dependencies: apisauce: 2.1.5 @@ -1512,11 +1126,8 @@ packages: dev: false /got/10.7.0: - resolution: - { - integrity: sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==} + engines: {node: '>=10'} dependencies: '@sindresorhus/is': 2.1.1 '@szmarczak/http-timer': 4.0.6 @@ -1536,11 +1147,8 @@ packages: dev: true /got/9.6.0: - resolution: - { - integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} dependencies: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 @@ -1555,175 +1163,118 @@ packages: url-parse-lax: 3.0.0 /graceful-fs/4.2.8: - resolution: - { - integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==, - } + resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} /hard-rejection/2.1.0: - resolution: - { - integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} dev: true /has-ansi/2.0.0: - resolution: { integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true /has-bigints/1.0.1: - resolution: - { - integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==, - } + resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} dev: true /has-flag/3.0.0: - resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } - engines: { node: '>=4' } + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} /has-flag/4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} /has-symbols/1.0.2: - resolution: - { - integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} dev: true /has-tostringtag/1.0.0: - resolution: - { - integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.2 dev: true /has-yarn/2.1.0: - resolution: - { - integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} /has/1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true /hosted-git-info/2.8.9: - resolution: - { - integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, - } + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true /hosted-git-info/3.0.8: - resolution: - { - integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /hosted-git-info/4.0.2: - resolution: - { - integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /http-cache-semantics/4.1.0: - resolution: - { - integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==, - } + resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} /human-signals/1.1.1: - resolution: - { - integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, - } - engines: { node: '>=8.12.0' } + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} dev: false /human-signals/2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: '>=10.17.0' } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} dev: true /iconv-lite/0.4.24: - resolution: - { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true /ignore-walk/3.0.4: - resolution: - { - integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==, - } + resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} dependencies: minimatch: 3.0.4 dev: true /ignore/5.1.9: - resolution: - { - integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} + engines: {node: '>= 4'} dev: true /import-fresh/3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 /import-lazy/2.1.0: - resolution: { integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= } - engines: { node: '>=4' } + resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} + engines: {node: '>=4'} /import-local/3.0.3: - resolution: - { - integrity: sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==} + engines: {node: '>=8'} hasBin: true dependencies: pkg-dir: 4.2.0 @@ -1731,67 +1282,46 @@ packages: dev: true /imurmurhash/0.1.4: - resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} /indent-string/3.2.0: - resolution: { integrity: sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= } - engines: { node: '>=4' } + resolution: {integrity: sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=} + engines: {node: '>=4'} dev: true /indent-string/4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} dev: true /indent-string/5.0.0: - resolution: - { - integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} dev: true /inflight/1.0.6: - resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 /inherits/2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} /ini/1.3.7: - resolution: - { - integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==, - } + resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==} dev: true /ini/1.3.8: - resolution: - { - integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, - } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} /ini/2.0.0: - resolution: - { - integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} /inquirer-autosubmit-prompt/0.2.0: - resolution: - { - integrity: sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==, - } + resolution: {integrity: sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==} dependencies: chalk: 2.4.2 inquirer: 6.5.2 @@ -1799,11 +1329,8 @@ packages: dev: true /inquirer/6.5.2: - resolution: - { - integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} dependencies: ansi-escapes: 3.2.0 chalk: 2.4.2 @@ -1821,11 +1348,8 @@ packages: dev: true /inquirer/7.3.3: - resolution: - { - integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -1843,11 +1367,8 @@ packages: dev: true /internal-slot/1.0.3: - resolution: - { - integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.1.1 has: 1.0.3 @@ -1855,398 +1376,272 @@ packages: dev: true /is-arrayish/0.2.1: - resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} /is-bigint/1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, - } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.1 dev: true /is-boolean-object/1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 dev: true /is-callable/1.2.4: - resolution: - { - integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + engines: {node: '>= 0.4'} dev: true /is-ci/2.0.0: - resolution: - { - integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, - } + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true dependencies: ci-info: 2.0.0 /is-core-module/2.8.0: - resolution: - { - integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==, - } + resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==} dependencies: has: 1.0.3 dev: true /is-date-object/1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-docker/2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true dev: true /is-extglob/2.1.1: - resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} dev: true /is-fullwidth-code-point/1.0.0: - resolution: { integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=} + engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 dev: true /is-fullwidth-code-point/2.0.0: - resolution: { integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= } - engines: { node: '>=4' } + resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} + engines: {node: '>=4'} /is-fullwidth-code-point/3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} /is-glob/4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-installed-globally/0.3.2: - resolution: - { - integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==} + engines: {node: '>=8'} dependencies: global-dirs: 2.1.0 is-path-inside: 3.0.3 dev: true /is-installed-globally/0.4.0: - resolution: - { - integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} dependencies: global-dirs: 3.0.0 is-path-inside: 3.0.3 /is-interactive/1.0.0: - resolution: - { - integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} /is-negative-zero/2.0.1: - resolution: - { - integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} + engines: {node: '>= 0.4'} dev: true /is-npm/5.0.0: - resolution: - { - integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} + engines: {node: '>=10'} /is-number-object/1.0.6: - resolution: - { - integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-number/7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true /is-obj/2.0.0: - resolution: - { - integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} /is-observable/1.1.0: - resolution: - { - integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} dependencies: symbol-observable: 1.2.0 dev: true /is-path-cwd/2.2.0: - resolution: - { - integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} dev: true /is-path-inside/3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} /is-plain-obj/1.1.0: - resolution: { integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=} + engines: {node: '>=0.10.0'} dev: true /is-promise/2.2.2: - resolution: - { - integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, - } + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true /is-regex/1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 dev: true /is-scoped/2.1.0: - resolution: - { - integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} + engines: {node: '>=8'} dependencies: scoped-regex: 2.1.0 dev: true /is-shared-array-buffer/1.0.1: - resolution: - { - integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==, - } + resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} dev: true /is-stream/1.1.0: - resolution: { integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} + engines: {node: '>=0.10.0'} dev: true /is-stream/2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} /is-string/1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-symbol/1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.2 dev: true /is-typedarray/1.0.0: - resolution: { integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= } + resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} /is-unicode-supported/0.1.0: - resolution: - { - integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} dev: true /is-url-superb/4.0.0: - resolution: - { - integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} dev: true /is-weakref/1.0.1: - resolution: - { - integrity: sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==, - } + resolution: {integrity: sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==} dependencies: call-bind: 1.0.2 dev: true /is-wsl/2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true /is-yarn-global/0.3.0: - resolution: - { - integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==, - } + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} /isexe/2.0.0: - resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} /issue-regex/3.1.0: - resolution: - { - integrity: sha512-0RHjbtw9QXeSYnIEY5Yrp2QZrdtz21xBDV9C/GIlY2POmgoS6a7qjkYS5siRKXScnuAj5/SPv1C3YForNCHTJA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-0RHjbtw9QXeSYnIEY5Yrp2QZrdtz21xBDV9C/GIlY2POmgoS6a7qjkYS5siRKXScnuAj5/SPv1C3YForNCHTJA==} + engines: {node: '>=10'} dev: true /js-tokens/4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} /json-buffer/3.0.0: - resolution: { integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= } + resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} /json-buffer/3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true /json-parse-better-errors/1.0.2: - resolution: - { - integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, - } + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true /json-parse-even-better-errors/2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} /keyv/3.1.0: - resolution: - { - integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==, - } + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} dependencies: json-buffer: 3.0.0 /keyv/4.0.4: - resolution: - { - integrity: sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==, - } + resolution: {integrity: sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==} dependencies: json-buffer: 3.0.1 dev: true /kind-of/6.0.3: - resolution: - { - integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} dev: true /latest-version/5.1.0: - resolution: - { - integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} dependencies: package-json: 6.5.0 /lines-and-columns/1.1.6: - resolution: { integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= } + resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} /listr-input/0.2.1: - resolution: - { - integrity: sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==} + engines: {node: '>=6'} dependencies: inquirer: 7.3.3 inquirer-autosubmit-prompt: 0.2.0 @@ -2255,16 +1650,13 @@ packages: dev: true /listr-silent-renderer/1.1.1: - resolution: { integrity: sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= } - engines: { node: '>=4' } + resolution: {integrity: sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=} + engines: {node: '>=4'} dev: true /listr-update-renderer/0.5.0_listr@0.14.3: - resolution: - { - integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} peerDependencies: listr: ^0.14.2 dependencies: @@ -2280,11 +1672,8 @@ packages: dev: true /listr-verbose-renderer/0.5.0: - resolution: - { - integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} dependencies: chalk: 2.4.2 cli-cursor: 2.1.0 @@ -2293,11 +1682,8 @@ packages: dev: true /listr/0.14.3: - resolution: - { - integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} dependencies: '@samverschueren/stream-to-observable': 0.3.1_rxjs@6.6.7 is-observable: 1.1.0 @@ -2313,8 +1699,8 @@ packages: dev: true /load-json-file/4.0.0: - resolution: { integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs= } - engines: { node: '>=4' } + resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} + engines: {node: '>=4'} dependencies: graceful-fs: 4.2.8 parse-json: 4.0.0 @@ -2323,131 +1709,116 @@ packages: dev: true /locate-path/5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true /locate-path/6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true /lodash.camelcase/4.3.0: - resolution: { integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY= } + resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} dev: false /lodash.isequal/4.5.0: - resolution: { integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA= } + resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=} dev: true /lodash.kebabcase/4.1.1: - resolution: { integrity: sha1-hImxyw0p/4gZXM7KRI/21swpXDY= } + resolution: {integrity: sha1-hImxyw0p/4gZXM7KRI/21swpXDY=} dev: false /lodash.lowercase/4.3.0: - resolution: { integrity: sha1-RlFaztSssLcJMTMzOvBo5MOxTp0= } + resolution: {integrity: sha1-RlFaztSssLcJMTMzOvBo5MOxTp0=} dev: false /lodash.lowerfirst/4.3.1: - resolution: { integrity: sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0= } + resolution: {integrity: sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0=} dev: false /lodash.pad/4.5.1: - resolution: { integrity: sha1-QzCUmoM6fI2iLMIPaibE1Z3runA= } + resolution: {integrity: sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=} dev: false /lodash.padend/4.6.1: - resolution: { integrity: sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= } + resolution: {integrity: sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=} dev: false /lodash.padstart/4.6.1: - resolution: { integrity: sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= } + resolution: {integrity: sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=} dev: false /lodash.repeat/4.1.0: - resolution: { integrity: sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ= } + resolution: {integrity: sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=} dev: false /lodash.snakecase/4.1.1: - resolution: { integrity: sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= } + resolution: {integrity: sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=} dev: false /lodash.startcase/4.4.0: - resolution: { integrity: sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg= } + resolution: {integrity: sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=} dev: false /lodash.trim/4.5.1: - resolution: { integrity: sha1-NkJefukL5KpeJ7zruFt9EepHqlc= } + resolution: {integrity: sha1-NkJefukL5KpeJ7zruFt9EepHqlc=} dev: false /lodash.trimend/4.5.1: - resolution: { integrity: sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8= } + resolution: {integrity: sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=} dev: false /lodash.trimstart/4.5.1: - resolution: { integrity: sha1-j/TexTLYJIavWVc8OURZFOlEp/E= } + resolution: {integrity: sha1-j/TexTLYJIavWVc8OURZFOlEp/E=} dev: false /lodash.uppercase/4.3.0: - resolution: { integrity: sha1-xASr/RRp+Tkx+bskz2zH1XBZvHM= } + resolution: {integrity: sha1-xASr/RRp+Tkx+bskz2zH1XBZvHM=} dev: false /lodash.upperfirst/4.3.1: - resolution: { integrity: sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= } + resolution: {integrity: sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=} dev: false /lodash.zip/4.2.0: - resolution: { integrity: sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= } + resolution: {integrity: sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=} dev: true /lodash/4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true /log-symbols/1.0.2: - resolution: { integrity: sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=} + engines: {node: '>=0.10.0'} dependencies: chalk: 1.1.3 dev: true /log-symbols/3.0.0: - resolution: - { - integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} dependencies: chalk: 2.4.2 dev: false /log-symbols/4.1.0: - resolution: - { - integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 dev: true /log-update/2.3.0: - resolution: { integrity: sha1-iDKP19HOeTiykoN0bwsbwSayRwg= } - engines: { node: '>=4' } + resolution: {integrity: sha1-iDKP19HOeTiykoN0bwsbwSayRwg=} + engines: {node: '>=4'} dependencies: ansi-escapes: 3.2.0 cli-cursor: 2.1.0 @@ -2455,89 +1826,62 @@ packages: dev: true /lowercase-keys/1.0.1: - resolution: - { - integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} /lowercase-keys/2.0.0: - resolution: - { - integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} /lru-cache/6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 /make-dir/3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.0 /make-error/1.3.6: - resolution: - { - integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, - } + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true /map-age-cleaner/0.1.3: - resolution: - { - integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} dependencies: p-defer: 1.0.0 dev: true /map-obj/1.0.1: - resolution: { integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=} + engines: {node: '>=0.10.0'} dev: true /map-obj/4.3.0: - resolution: - { - integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} dev: true /mem/6.1.1: - resolution: - { - integrity: sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==} + engines: {node: '>=8'} dependencies: map-age-cleaner: 0.1.3 mimic-fn: 3.1.0 dev: true /memorystream/0.3.1: - resolution: { integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI= } - engines: { node: '>= 0.10.0' } + resolution: {integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI=} + engines: {node: '>= 0.10.0'} dev: true /meow/10.1.1: - resolution: - { - integrity: sha512-uzOAEBTGujHAD6bVzIQQk5kDTgatxmpVmr1pj9QhwsHLEG2AiB+9F08/wmjrZIk4h5pWxERd7+jqGZywYx3ZFw==, - } - engines: { node: '>=12.17' } + resolution: {integrity: sha512-uzOAEBTGujHAD6bVzIQQk5kDTgatxmpVmr1pj9QhwsHLEG2AiB+9F08/wmjrZIk4h5pWxERd7+jqGZywYx3ZFw==} + engines: {node: '>=12.17'} dependencies: '@types/minimist': 1.2.2 camelcase-keys: 7.0.1 @@ -2554,11 +1898,8 @@ packages: dev: true /meow/8.1.2: - resolution: - { - integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 @@ -2574,90 +1915,57 @@ packages: dev: true /merge-stream/2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} /merge2/1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /micromatch/4.0.4: - resolution: - { - integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.0 dev: true /mimic-fn/1.2.0: - resolution: - { - integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} dev: true /mimic-fn/2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} /mimic-fn/3.1.0: - resolution: - { - integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} dev: true /mimic-response/1.0.1: - resolution: - { - integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} /mimic-response/2.1.0: - resolution: - { - integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} dev: true /min-indent/1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true /minimatch/3.0.4: - resolution: - { - integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==, - } + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 /minimist-options/4.1.0: - resolution: - { - integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 @@ -2665,50 +1973,32 @@ packages: dev: true /minimist/1.2.5: - resolution: - { - integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==, - } + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} /ms/2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: false /mute-stream/0.0.7: - resolution: { integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= } + resolution: {integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=} dev: true /mute-stream/0.0.8: - resolution: - { - integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, - } + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} /new-github-release-url/1.0.0: - resolution: - { - integrity: sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==} + engines: {node: '>=10'} dependencies: type-fest: 0.4.1 dev: true /nice-try/1.0.5: - resolution: - { - integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, - } + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true /normalize-package-data/2.5.0: - resolution: - { - integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, - } + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.20.0 @@ -2717,11 +2007,8 @@ packages: dev: true /normalize-package-data/3.0.3: - resolution: - { - integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} dependencies: hosted-git-info: 4.0.2 is-core-module: 2.8.0 @@ -2730,26 +2017,17 @@ packages: dev: true /normalize-url/4.5.1: - resolution: - { - integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} /normalize-url/6.1.0: - resolution: - { - integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} dev: true /np/7.6.0: - resolution: - { - integrity: sha512-WWGZtfNkE6MEkI7LE8NtG7poTqzTHj/tssBzcPnBAdMVPXkXDtX2wk0ptrj8YZ3u4TFmGSqioSohdud86aJxSg==, - } - engines: { git: '>=2.11.0', node: '>=10', npm: '>=6.8.0', yarn: '>=1.7.0' } + resolution: {integrity: sha512-WWGZtfNkE6MEkI7LE8NtG7poTqzTHj/tssBzcPnBAdMVPXkXDtX2wk0ptrj8YZ3u4TFmGSqioSohdud86aJxSg==} + engines: {git: '>=2.11.0', node: '>=10', npm: '>=6.8.0', yarn: '>=1.7.0'} hasBin: true dependencies: '@samverschueren/stream-to-observable': 0.3.1_rxjs@6.6.7 @@ -2796,11 +2074,8 @@ packages: dev: true /npm-name/6.0.1: - resolution: - { - integrity: sha512-fhKRvUAxaYzMEUZim4mXWyfFbVS+M1CbrCLdAo3txWzrctxKka/h+KaBW0O9Cz5uOM00Nldn2JLWhuwnyW3SUw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-fhKRvUAxaYzMEUZim4mXWyfFbVS+M1CbrCLdAo3txWzrctxKka/h+KaBW0O9Cz5uOM00Nldn2JLWhuwnyW3SUw==} + engines: {node: '>=10'} dependencies: got: 10.7.0 is-scoped: 2.1.0 @@ -2814,11 +2089,8 @@ packages: dev: true /npm-run-all/4.1.5: - resolution: - { - integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} hasBin: true dependencies: ansi-styles: 3.2.1 @@ -2833,44 +2105,32 @@ packages: dev: true /npm-run-path/4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 /number-is-nan/1.0.1: - resolution: { integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=} + engines: {node: '>=0.10.0'} dev: true /object-assign/4.1.1: - resolution: { integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + engines: {node: '>=0.10.0'} /object-inspect/1.11.0: - resolution: - { - integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==, - } + resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} dev: true /object-keys/1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} dev: true /object.assign/4.1.2: - resolution: - { - integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -2879,43 +2139,34 @@ packages: dev: true /once/1.4.0: - resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 /onetime/2.0.1: - resolution: { integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= } - engines: { node: '>=4' } + resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=} + engines: {node: '>=4'} dependencies: mimic-fn: 1.2.0 dev: true /onetime/5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 /open/7.4.2: - resolution: - { - integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 dev: true /ora/4.1.1: - resolution: - { - integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} + engines: {node: '>=8'} dependencies: chalk: 3.0.0 cli-cursor: 3.1.0 @@ -2928,24 +2179,18 @@ packages: dev: false /org-regex/1.0.0: - resolution: - { - integrity: sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==} + engines: {node: '>=8'} dev: true /os-tmpdir/1.0.2: - resolution: { integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=} + engines: {node: '>=0.10.0'} dev: true /ow/0.21.0: - resolution: - { - integrity: sha512-dlsoDe39g7mhdsdrC1R/YwjT7yjVqE3svWwOlMGvN690waBkgEZBmKBdkmKvSt5/wZ6E0Jn/nIesPqMZOpPKqw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-dlsoDe39g7mhdsdrC1R/YwjT7yjVqE3svWwOlMGvN690waBkgEZBmKBdkmKvSt5/wZ6E0Jn/nIesPqMZOpPKqw==} + engines: {node: '>=10'} dependencies: '@sindresorhus/is': 4.2.0 callsites: 3.1.0 @@ -2956,159 +2201,111 @@ packages: dev: true /p-cancelable/1.1.0: - resolution: - { - integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} /p-cancelable/2.1.1: - resolution: - { - integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} dev: true /p-defer/1.0.0: - resolution: { integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= } - engines: { node: '>=4' } + resolution: {integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=} + engines: {node: '>=4'} dev: true /p-event/4.2.0: - resolution: - { - integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} dependencies: p-timeout: 3.2.0 dev: true /p-finally/1.0.0: - resolution: { integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= } - engines: { node: '>=4' } + resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} + engines: {node: '>=4'} dev: true /p-finally/2.0.1: - resolution: - { - integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} + engines: {node: '>=8'} dev: false /p-limit/2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true /p-limit/3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true /p-locate/4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true /p-locate/5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true /p-map/2.1.0: - resolution: - { - integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} dev: true /p-map/3.0.0: - resolution: - { - integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} dependencies: aggregate-error: 3.1.0 dev: true /p-map/4.0.0: - resolution: - { - integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true /p-memoize/4.0.1: - resolution: - { - integrity: sha512-km0sP12uE0dOZ5qP+s7kGVf07QngxyG0gS8sYFvFWhqlgzOsSy+m71aUejf/0akxj5W7gE//2G74qTv6b4iMog==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-km0sP12uE0dOZ5qP+s7kGVf07QngxyG0gS8sYFvFWhqlgzOsSy+m71aUejf/0akxj5W7gE//2G74qTv6b4iMog==} + engines: {node: '>=10'} dependencies: mem: 6.1.1 mimic-fn: 3.1.0 dev: true /p-timeout/3.2.0: - resolution: - { - integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} dependencies: p-finally: 1.0.0 dev: true /p-timeout/4.1.0: - resolution: - { - integrity: sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==} + engines: {node: '>=10'} dev: true /p-try/2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true /package-json/6.5.0: - resolution: - { - integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} dependencies: got: 9.6.0 registry-auth-token: 4.2.1 @@ -3116,28 +2313,22 @@ packages: semver: 6.3.0 /parent-module/1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 /parse-json/4.0.0: - resolution: { integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= } - engines: { node: '>=4' } + resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} + engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 dev: true /parse-json/5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.16.0 error-ex: 1.3.2 @@ -3145,166 +2336,115 @@ packages: lines-and-columns: 1.1.6 /path-exists/4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true /path-is-absolute/1.0.1: - resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} /path-key/2.0.1: - resolution: { integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= } - engines: { node: '>=4' } + resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=} + engines: {node: '>=4'} dev: true /path-key/3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} /path-parse/1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type/3.0.0: - resolution: - { - integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} dependencies: pify: 3.0.0 dev: true /path-type/4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} /pend/1.2.0: - resolution: { integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA= } + resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} dev: false /picomatch/2.3.0: - resolution: - { - integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} + engines: {node: '>=8.6'} dev: true /pidtree/0.3.1: - resolution: - { - integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} hasBin: true dev: true /pify/3.0.0: - resolution: { integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= } - engines: { node: '>=4' } + resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} + engines: {node: '>=4'} dev: true /pkg-dir/4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true /pkg-dir/5.0.0: - resolution: - { - integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} dependencies: find-up: 5.0.0 dev: true /pluralize/8.0.0: - resolution: - { - integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} dev: false /prepend-http/2.0.0: - resolution: { integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= } - engines: { node: '>=4' } + resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} + engines: {node: '>=4'} /prettier/2.5.1: - resolution: - { - integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} + engines: {node: '>=10.13.0'} hasBin: true dev: true /pump/3.0.0: - resolution: - { - integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, - } + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 /pupa/2.1.1: - resolution: - { - integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} dependencies: escape-goat: 2.1.1 /queue-microtask/1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru/4.0.1: - resolution: - { - integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} dev: true /quick-lru/5.1.1: - resolution: - { - integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} dev: true /rc/1.2.8: - resolution: - { - integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, - } + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: deep-extend: 0.6.0 @@ -3313,11 +2453,8 @@ packages: strip-json-comments: 2.0.1 /read-pkg-up/7.0.1: - resolution: - { - integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 @@ -3325,11 +2462,8 @@ packages: dev: true /read-pkg-up/8.0.0: - resolution: - { - integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} dependencies: find-up: 5.0.0 read-pkg: 6.0.0 @@ -3337,8 +2471,8 @@ packages: dev: true /read-pkg/3.0.0: - resolution: { integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= } - engines: { node: '>=4' } + resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} + engines: {node: '>=4'} dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 @@ -3346,11 +2480,8 @@ packages: dev: true /read-pkg/5.2.0: - resolution: - { - integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 @@ -3359,11 +2490,8 @@ packages: dev: true /read-pkg/6.0.0: - resolution: - { - integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 3.0.3 @@ -3372,256 +2500,178 @@ packages: dev: true /redent/3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 dev: true /redent/4.0.0: - resolution: - { - integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} dependencies: indent-string: 5.0.0 strip-indent: 4.0.0 dev: true /registry-auth-token/4.2.1: - resolution: - { - integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} + engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 /registry-url/5.1.0: - resolution: - { - integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} dependencies: rc: 1.2.8 /resolve-cwd/3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true /resolve-from/4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} /resolve-from/5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true /resolve/1.20.0: - resolution: - { - integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==, - } + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: is-core-module: 2.8.0 path-parse: 1.0.7 dev: true /responselike/1.0.2: - resolution: { integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= } + resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} dependencies: lowercase-keys: 1.0.1 /responselike/2.0.0: - resolution: - { - integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==, - } + resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==} dependencies: lowercase-keys: 2.0.0 dev: true /restore-cursor/2.0.0: - resolution: { integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= } - engines: { node: '>=4' } + resolution: {integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=} + engines: {node: '>=4'} dependencies: onetime: 2.0.1 signal-exit: 3.0.5 dev: true /restore-cursor/3.1.0: - resolution: - { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.5 /reusify/1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rimraf/2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, - } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.0 dev: false /rimraf/3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.0 dev: true /run-async/2.4.1: - resolution: - { - integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} dev: true /run-parallel/1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /rxjs/6.6.7: - resolution: - { - integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, - } - engines: { npm: '>=2.0.0' } + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} dependencies: tslib: 1.14.1 dev: true /safer-buffer/2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true /scoped-regex/2.1.0: - resolution: - { - integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} + engines: {node: '>=8'} dev: true /semver-diff/3.1.1: - resolution: - { - integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} dependencies: semver: 6.3.0 /semver/5.7.1: - resolution: - { - integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, - } + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true /semver/6.3.0: - resolution: - { - integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, - } + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true /semver/7.3.5: - resolution: - { - integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 /shebang-command/1.2.0: - resolution: { integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=} + engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true /shebang-command/2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 /shebang-regex/1.0.0: - resolution: { integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=} + engines: {node: '>=0.10.0'} dev: true /shebang-regex/3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} /shell-quote/1.7.3: - resolution: - { - integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==, - } + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true /side-channel/1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, - } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 @@ -3629,70 +2679,49 @@ packages: dev: true /signal-exit/3.0.5: - resolution: - { - integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==, - } + resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} /slash/3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /slice-ansi/0.0.4: - resolution: { integrity: sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=} + engines: {node: '>=0.10.0'} dev: true /spdx-correct/3.1.1: - resolution: - { - integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, - } + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.10 dev: true /spdx-exceptions/2.3.0: - resolution: - { - integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, - } + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true /spdx-expression-parse/3.0.1: - resolution: - { - integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, - } + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.10 dev: true /spdx-license-ids/3.0.10: - resolution: - { - integrity: sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==, - } + resolution: {integrity: sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==} dev: true /split/1.0.1: - resolution: - { - integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==, - } + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} dependencies: through: 2.3.8 dev: true /string-width/1.0.2: - resolution: { integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=} + engines: {node: '>=0.10.0'} dependencies: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 @@ -3700,32 +2729,23 @@ packages: dev: true /string-width/2.1.1: - resolution: - { - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 /string-width/4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 /string.prototype.padend/3.1.3: - resolution: - { - integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -3733,222 +2753,159 @@ packages: dev: true /string.prototype.trimend/1.0.4: - resolution: - { - integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==, - } + resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true /string.prototype.trimstart/1.0.4: - resolution: - { - integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==, - } + resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true /strip-ansi/3.0.1: - resolution: { integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true /strip-ansi/4.0.0: - resolution: { integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= } - engines: { node: '>=4' } + resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} + engines: {node: '>=4'} dependencies: - ansi-regex: 5.0.1 + ansi-regex: 3.0.1 /strip-ansi/5.2.0: - resolution: - { - integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} dependencies: ansi-regex: 5.0.1 dev: true /strip-ansi/6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 /strip-bom/3.0.0: - resolution: { integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= } - engines: { node: '>=4' } + resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} + engines: {node: '>=4'} dev: true /strip-final-newline/2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} /strip-indent/3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-indent/4.0.0: - resolution: - { - integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments/2.0.1: - resolution: { integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + engines: {node: '>=0.10.0'} /supports-color/2.0.0: - resolution: { integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=} + engines: {node: '>=0.8.0'} dev: true /supports-color/5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 /supports-color/7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 /supports-hyperlinks/2.2.0: - resolution: - { - integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 dev: true /symbol-observable/1.2.0: - resolution: - { - integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} dev: true /symbol-observable/3.0.0: - resolution: - { - integrity: sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==} + engines: {node: '>=0.10'} dev: true /term-size/2.2.1: - resolution: - { - integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} dev: false /terminal-link/2.1.1: - resolution: - { - integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.2.0 dev: true /through/2.3.8: - resolution: { integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= } + resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} dev: true /tmp/0.0.33: - resolution: - { - integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, - } - engines: { node: '>=0.6.0' } + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 dev: true /to-readable-stream/1.0.0: - resolution: - { - integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} /to-readable-stream/2.1.0: - resolution: - { - integrity: sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==} + engines: {node: '>=8'} dev: true /to-regex-range/5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true /trim-newlines/3.0.1: - resolution: - { - integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} dev: true /trim-newlines/4.0.2: - resolution: - { - integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==} + engines: {node: '>=12'} dev: true /ts-node/10.4.0_06de4b00c69b73d094e2c5b522a6ad57: - resolution: - { - integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==, - } + resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -3978,96 +2935,60 @@ packages: dev: true /tslib/1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /type-fest/0.10.0: - resolution: - { - integrity: sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==} + engines: {node: '>=8'} dev: true /type-fest/0.18.1: - resolution: - { - integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} dev: true /type-fest/0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} /type-fest/0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} dev: true /type-fest/0.4.1: - resolution: - { - integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} + engines: {node: '>=6'} dev: true /type-fest/0.6.0: - resolution: - { - integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} dev: true /type-fest/0.8.1: - resolution: - { - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} /type-fest/1.4.0: - resolution: - { - integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} dev: true /typedarray-to-buffer/3.1.5: - resolution: - { - integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, - } + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 /typescript/4.5.5: - resolution: - { - integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==, - } - engines: { node: '>=4.2.0' } + resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} + engines: {node: '>=4.2.0'} hasBin: true dev: true /unbox-primitive/1.0.1: - resolution: - { - integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==, - } + resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} dependencies: function-bind: 1.1.1 has-bigints: 1.0.1 @@ -4076,20 +2997,14 @@ packages: dev: true /unique-string/2.0.0: - resolution: - { - integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} dependencies: crypto-random-string: 2.0.0 /update-notifier/5.1.0: - resolution: - { - integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} + engines: {node: '>=10'} dependencies: boxen: 5.1.2 chalk: 4.1.2 @@ -4107,43 +3022,37 @@ packages: xdg-basedir: 4.0.0 /url-parse-lax/3.0.0: - resolution: { integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= } - engines: { node: '>=4' } + resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} + engines: {node: '>=4'} dependencies: prepend-http: 2.0.0 /vali-date/1.0.0: - resolution: { integrity: sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=} + engines: {node: '>=0.10.0'} dev: true /validate-npm-package-license/3.0.4: - resolution: - { - integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, - } + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true /validate-npm-package-name/3.0.0: - resolution: { integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34= } + resolution: {integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34=} dependencies: builtins: 1.0.3 dev: true /wcwidth/1.0.1: - resolution: { integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= } + resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} dependencies: defaults: 1.0.3 dev: false /which-boxed-primitive/1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, - } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -4153,61 +3062,46 @@ packages: dev: true /which/1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, - } + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true /which/2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 /widest-line/3.1.0: - resolution: - { - integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} dependencies: string-width: 4.2.3 /wrap-ansi/3.0.1: - resolution: { integrity: sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= } - engines: { node: '>=4' } + resolution: {integrity: sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=} + engines: {node: '>=4'} dependencies: string-width: 2.1.1 strip-ansi: 4.0.0 dev: true /wrap-ansi/7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 /wrappy/1.0.2: - resolution: { integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= } + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} /write-file-atomic/3.0.3: - resolution: - { - integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, - } + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 @@ -4215,51 +3109,33 @@ packages: typedarray-to-buffer: 3.1.5 /xdg-basedir/4.0.0: - resolution: - { - integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} /yallist/4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} /yaml/1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} /yargs-parser/20.2.9: - resolution: - { - integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} /yauzl/2.10.0: - resolution: { integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= } + resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: false /yn/3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} dev: true /yocto-queue/0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true diff --git a/tools/cli/readme.md b/tools/cli/readme.md index e25f58662..4294bf6a5 100644 --- a/tools/cli/readme.md +++ b/tools/cli/readme.md @@ -25,7 +25,9 @@ file to get started! ## Publish Package -Update the version in `package.json` respectively following the semver and then run the below command to publish the latest version in npm portal. +Update the version in `package.json` respectively following the semver and then +run the below command to publish the latest version in npm portal. + ```bash npm publish ``` diff --git a/tools/cli/src/commands/down.ts b/tools/cli/src/commands/down.ts index 8133b819e..03dc8e989 100644 --- a/tools/cli/src/commands/down.ts +++ b/tools/cli/src/commands/down.ts @@ -4,63 +4,65 @@ import path from 'path' -import {RegistryTearDownOptions, Toolbox} from '../types' +import { RegistryTearDownOptions, Toolbox } from '../types' export default { - name: 'down', - run: async (toolbox: Toolbox) => { - const { - environment, - events, - filesystem, - print, - prompt, - registry, - strings, - handleEvent - } = toolbox - - - events.on('environment.check', handleEvent) - events.on('registry.down', handleEvent) - - // Print the title - print.info('') - print.info(print.colors.green.bold('Registry Teardown')) - print.info('') - - // Check that all tools are installed - await environment.check() - - - // Check if a registry already exists in the current directory - if ( - !await filesystem.existsAsync(path.resolve(process.cwd(), 'registry.yaml')) - ) { - events.emit('registry.create', { - status: 'error', - operation: 'checking-env', - message: `A registry has not been setup in the current directory.`, - }) - } - - // Get necessary information - print.info('') - const options: RegistryTearDownOptions = await prompt.ask([ - { - type: 'input', - message: print.colors.reset('Do you really want to stop and remove the containers?'), - name: 'stopConfirmation', - initial: "Y/N", - required: true - } - ]) - print.info(options.stopConfirmation) - if (options.stopConfirmation === "Y" || options.stopConfirmation === "y") { - await registry.down() - } else { - print.error("Invalid option") - } - print.info('') - }, + name: 'down', + run: async (toolbox: Toolbox) => { + const { + environment, + events, + filesystem, + print, + prompt, + registry, + strings, + handleEvent, + } = toolbox + + events.on('environment.check', handleEvent) + events.on('registry.down', handleEvent) + + // Print the title + print.info('') + print.info(print.colors.green.bold('Registry Teardown')) + print.info('') + + // Check that all tools are installed + await environment.check() + + // Check if a registry already exists in the current directory + if ( + !(await filesystem.existsAsync( + path.resolve(process.cwd(), 'registry.yaml') + )) + ) { + events.emit('registry.create', { + status: 'error', + operation: 'checking-env', + message: `A registry has not been setup in the current directory.`, + }) + } + + // Get necessary information + print.info('') + const options: RegistryTearDownOptions = await prompt.ask([ + { + type: 'input', + message: print.colors.reset( + 'Do you really want to stop and remove the containers?' + ), + name: 'stopConfirmation', + initial: 'Y/N', + required: true, + }, + ]) + print.info(options.stopConfirmation) + if (options.stopConfirmation === 'Y' || options.stopConfirmation === 'y') { + await registry.down() + } else { + print.error('Invalid option') + } + print.info('') + }, } diff --git a/tools/cli/src/commands/health.ts b/tools/cli/src/commands/health.ts index dcdcf3634..72889946f 100644 --- a/tools/cli/src/commands/health.ts +++ b/tools/cli/src/commands/health.ts @@ -2,41 +2,41 @@ // `registry health` command // Shows the health of all containers of the registry instance -import {RegistryHealth, Toolbox} from '../types' +import { RegistryHealth, Toolbox } from '../types' export default { - name: 'health', - run: async (toolbox: Toolbox) => { - const {environment, events, print, registry, handleEvent} = toolbox - - events.on('environment.check', handleEvent) - events.on('registry.health', handleEvent) - - // Check that all tools are installed - await environment.check(process.cwd()) - // Get the registry health - const containers = await registry.health() - - // Print the name of the registry - print.info('') - print.info(print.colors.green.bold((await registry.config()).name)) - print.info('') - - // Print the container details as a table - print.table( - [ - ['Name', 'Health', "Error"], - ...containers.map((container: RegistryHealth) => [ - print.colors.green(container.name), - print.colors.cyan(container.status), - print.colors.cyan(container.err) - ]), - ], - { - format: 'markdown', - } - ) - - print.info('') - }, + name: 'health', + run: async (toolbox: Toolbox) => { + const { environment, events, print, registry, handleEvent } = toolbox + + events.on('environment.check', handleEvent) + events.on('registry.health', handleEvent) + + // Check that all tools are installed + await environment.check(process.cwd()) + // Get the registry health + const containers = await registry.health() + + // Print the name of the registry + print.info('') + print.info(print.colors.green.bold((await registry.config()).name)) + print.info('') + + // Print the container details as a table + print.table( + [ + ['Name', 'Health', 'Error'], + ...containers.map((container: RegistryHealth) => [ + print.colors.green(container.name), + print.colors.cyan(container.status), + print.colors.cyan(container.err), + ]), + ], + { + format: 'markdown', + } + ) + + print.info('') + }, } diff --git a/tools/cli/src/commands/init.ts b/tools/cli/src/commands/init.ts index 607adb28a..23cf53b68 100644 --- a/tools/cli/src/commands/init.ts +++ b/tools/cli/src/commands/init.ts @@ -5,6 +5,7 @@ import path from 'path' import { CLIEvent, RegistrySetupOptions, Toolbox } from '../types' +import { config } from '../config/config' export default { name: 'init', @@ -17,9 +18,9 @@ export default { prompt, registry, strings, - handleEvent + handleEvent, } = toolbox - + events.on('environment.check', handleEvent) events.on('registry.create', handleEvent) @@ -109,13 +110,72 @@ export default { name: 'pathToConsentConfiguration', initial: 'use-example-config', }, + { + type: 'confirm', + message: print.colors.reset( + 'Enable authentication in the system' + ), + name: 'enableRegistryAuthentication', + initial: true, + }, + { + type: 'confirm', + message: print.colors.reset( + 'Do you want to create entities asynchronously' + ), + name: 'asyncEnabled', + initial: false, + }, + { + type: 'confirm', + message: print.colors.reset( + 'Do you want to enable elastic search' + ), + name: 'elasticSearchEnabled', + initial: false, + }, + { + type: 'confirm', + message: print.colors.reset( + 'Do you want to enable signature service in RC ?' + ), + name: 'signatureEnabled', + initial: true, + }, + { + type: 'confirm', + message: print.colors.reset( + 'Are you using Sunbird RC to issue Verifiable credentials' + ), + name: 'enableVCIssuance', + initial: true, + }, + { + type: 'select', + message: print.colors.reset( + 'Select a manager type ' + ) + print.colors.yellow('(if using a single instance of registry, set this value to DefinitionsManager else set to DistributedDefinitionsManager)'), + name: 'managerType', + choices: Object.keys(config.definationMangerTypes), + }, + { + type: 'multiselect', + name: 'auxiliaryServicesToBeEnabled', + message: print.colors.highlight( + 'Do you want to enable other auxiliary services ' + ) + print.colors.magenta('- Use SPACE BAR to select and unselect.'), + choices: Object.keys(config.auxiliary_services), + }, ]) print.info('') // Setup the registry + print.debug(options); await registry.create(options as unknown as RegistrySetupOptions) print.info('') - print.highlight('Sunbird-RC is configured with test/default keys for signing. It is required to be updated `imports/config.json` before going live/production') + print.highlight( + 'Sunbird-RC is configured with test/default keys for signing. It is required to be updated `imports/config.json` before going live/production' + ) }, } diff --git a/tools/cli/src/commands/restart.ts b/tools/cli/src/commands/restart.ts index b2d29b5cb..1fb70ac62 100644 --- a/tools/cli/src/commands/restart.ts +++ b/tools/cli/src/commands/restart.ts @@ -7,7 +7,8 @@ import { CLIEvent, Toolbox } from '../types' export default { name: 'restart', run: async (toolbox: Toolbox) => { - const { environment, events, parameters, print, registry, handleEvent } = toolbox + const { environment, events, parameters, print, registry, handleEvent } = + toolbox // Listen to events and show progress diff --git a/tools/cli/src/extensions/cli-extension.ts b/tools/cli/src/extensions/cli-extension.ts index c60c30149..0c0bc0c1c 100644 --- a/tools/cli/src/extensions/cli-extension.ts +++ b/tools/cli/src/extensions/cli-extension.ts @@ -13,7 +13,12 @@ import restart from '../toolbox/registry/restart' import down from '../toolbox/registry/down' import health from '../toolbox/registry/health' -import {CLIEvent, RegistryConfiguration, RegistrySetupOptions, Toolbox} from '../types' +import { + CLIEvent, + RegistryConfiguration, + RegistrySetupOptions, + Toolbox, +} from '../types' export default (toolbox: Toolbox) => { // Event emmitter @@ -52,7 +57,7 @@ export default (toolbox: Toolbox) => { down: () => down(toolbox), health: () => health(toolbox), } - const {print} = toolbox; + const { print } = toolbox const spinner = print.spin('Loading...').stop() toolbox.handleEvent = (event: CLIEvent) => { // Print and exit on error @@ -65,11 +70,11 @@ export default (toolbox: Toolbox) => { // Else just print the message print.error(print.colors.error(`${print.xmark} ${event.message}`)) } - + print.error('') process.exit(1) } - + // Print and continue on success if (event.status === 'success') { // Stop the spinner if it is running... @@ -83,19 +88,19 @@ export default (toolbox: Toolbox) => { ) } } - + // If it is a progress event, show a spinner if (event.status === 'progress') { spinner.start(print.colors.highlight(`${event.message}...`)) } } - + toolbox.until = async (conditionFunction: () => Promise) => { const poll = async (resolve: (value: unknown) => void) => { if (await conditionFunction()) resolve(true) else setTimeout((_) => poll(resolve), 400) } - + return new Promise(poll) } diff --git a/tools/cli/src/templates/.env-cli b/tools/cli/src/templates/.env-cli index 28fd2e9d2..94d94ab43 100644 --- a/tools/cli/src/templates/.env-cli +++ b/tools/cli/src/templates/.env-cli @@ -3,4 +3,9 @@ KEYCLOAK_CLIENT_ID=<%= props.keycloakFrontendClientId %> KEYCLOAK_ADMIN_CLIENT_ID=<%= props.keycloakAdminClientId %> KEYCLOAK_REALM=<%= props.realmName %> KEYCLOAK_ADMIN_USER=<%= props.keycloakAdminUser %> -KEYCLOAK_ADMIN_PASSWORD=<%= props.keycloakAdminPass %> \ No newline at end of file +KEYCLOAK_ADMIN_PASSWORD=<%= props.keycloakAdminPass %> +AUTHENTICATION_ENABLED=<%= props.enableRegistryAuthentication %> +ASYNC_ENABLED=<%= props.asyncEnabled %> +MANAGER_TYPE=<%= props.managerType %> +SIGNATURE_ENABLED=<%= props.signatureEnabled %> +SEARCH_PROVIDER_NAME=<%= props.searchProvideName %> diff --git a/tools/cli/src/templates/config/keycloak/realm-export.json b/tools/cli/src/templates/config/keycloak/realm-export.json index 28850e44a..ea5c61ed3 100644 --- a/tools/cli/src/templates/config/keycloak/realm-export.json +++ b/tools/cli/src/templates/config/keycloak/realm-export.json @@ -439,7 +439,7 @@ "requiredActions": [], "realmRoles": ["default-roles-<%= props.realmName %>"], "clientRoles": { - "realm-management": ["manage-users","manage-realm"] + "realm-management": ["manage-users", "manage-realm"] }, "notBefore": 0, "groups": [] diff --git a/tools/cli/src/toolbox/registry/create.ts b/tools/cli/src/toolbox/registry/create.ts index cc04a9d24..0652c8ca3 100644 --- a/tools/cli/src/toolbox/registry/create.ts +++ b/tools/cli/src/toolbox/registry/create.ts @@ -5,6 +5,8 @@ import path from 'path' import KeycloakWrapper from './helpers/keycloak' import { allUp } from './status' +import {config} from '../../config/config' +var keypair = require('keypair'); import { RegistrySetupOptions, Toolbox } from '../../types' @@ -16,7 +18,61 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { pass: setupOptions.keycloakAdminPass, realm: setupOptions.realmName, }) + let enableTheseServices = [ + config.docker_service_name.DB, + config.docker_service_name.REGISTRY, + config.docker_service_name.KEYCLOAK, + config.docker_service_name.CLAIMS_MS, + config.docker_service_name.CERTIFICATE_SIGHNER, + config.docker_service_name.FILE_STORAGE + ] + // Enable redis for distributed systems + if (setupOptions?.managerType === Object.keys(config.definationMangerTypes)[1]) { + enableTheseServices.push(config.docker_service_name.REDIS); + } + setupOptions.managerType = config.definationMangerTypes[setupOptions?.managerType] + // Check and Enable Elastic Search + if (setupOptions?.elasticSearchEnabled) { + setupOptions['searchProvideName'] = config.DEFAULT_ES_PROVIDER_NAME; + enableTheseServices.unshift(config.docker_service_name.ES); + } else setupOptions['searchProvideName'] = config.DEFAULT_NS_PROVIDER_NAME; + + // Check and Enable Elastic Search + if (setupOptions?.asyncEnabled) { + enableTheseServices.push(config.docker_service_name.KAFKA); + } + + // enable certificate API service + if (setupOptions?.enableVCIssuance) { + enableTheseServices.push(config.docker_service_name.CERTIFICATE_API) + } + + // enable Auxiliary services + if (setupOptions?.auxiliaryServicesToBeEnabled.length > 0 ) { + setupOptions?.auxiliaryServicesToBeEnabled.forEach( (i : string) => enableTheseServices.push(config.auxiliary_services[i])) + } + + console.log(setupOptions); + let dockerCommand = 'docker compose up -d ' + let conditionalEnablinOfDockerCommand = dockerCommand + enableTheseServices.join(' '); + console.log(conditionalEnablinOfDockerCommand); + + let deafultTemplateForKeys = require('../../templates/config.json'); + var pair = keypair(); + console.log( "before",deafultTemplateForKeys); + deafultTemplateForKeys.issuers.default.publicKey = pair.public; + deafultTemplateForKeys.issuers.default.privateKey = pair.private; + console.log( "after ",deafultTemplateForKeys); + + // Convert the new object to JSON + const newConfigJson = JSON.stringify(deafultTemplateForKeys, null, 2); + + // Specify the path to the config.json file + const configFilePath = 'imports/config.json'; + + + // Copy over config files with the proper variables events.emit('registry.create', { status: 'progress', @@ -100,6 +156,12 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { }) }) } + + // Write the new JSON content to the file, replacing the old content + filesystem.write(configFilePath, newConfigJson); + + console.log(`Updated ${configFilePath} with new content.`); + events.emit('registry.create', { status: 'success', operation: 'copying-files', @@ -120,7 +182,7 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { message: `An unexpected error occurred while merging multiple env files: ${error.message}`, }) }) - await system.exec('docker compose up -d').catch((error: Error) => { + await system.exec(conditionalEnablinOfDockerCommand).catch((error: Error) => { events.emit('registry.create', { status: 'error', operation: 'starting-containers', diff --git a/tools/cli/src/toolbox/registry/down.ts b/tools/cli/src/toolbox/registry/down.ts index 9705e91be..9d7fe6d44 100644 --- a/tools/cli/src/toolbox/registry/down.ts +++ b/tools/cli/src/toolbox/registry/down.ts @@ -1,61 +1,60 @@ // @/toolbox/registry/down // Stop registry instance in the current directory -import {allUp} from './status' +import { allUp } from './status' -import {Toolbox} from '../../types' -import {system} from "gluegun"; -import path from "path"; +import { Toolbox } from '../../types' +import { system } from 'gluegun' +import path from 'path' // Accept a toolbox and stop the registry instance in return export default async (toolbox: Toolbox) => { - const {events, system, until, filesystem} = toolbox - - events.emit('registry.down', { - status: 'progress', - operation: 'stopping-containers', - message: 'Stopping and removing docker instances', - }) - - await system.exec('docker compose down').catch((error: Error) => { - events.emit('registry.down', { - status: 'error', - operation: 'stopping-containers', - message: `An unexpected error occurred while stopping the registry: ${error.message} ${error.stack}`, - }) - }) - // Wait for the containers to stop - await until(allDown) - events.emit('registry.down', { - status: 'progress', - operation: 'remove-file', - message: 'Removing init files', - }) - filesystem.remove(path.resolve(process.cwd(), 'registry.yaml')) - events.emit('registry.down', { - status: 'success', - operation: 'remove-file', - message: 'Removing init files', - }) - events.emit('registry.down', { - status: 'success', - operation: 'stopping-containers', - message: 'Successfully stopped all services!', - }) - + const { events, system, until, filesystem } = toolbox + + events.emit('registry.down', { + status: 'progress', + operation: 'stopping-containers', + message: 'Stopping and removing docker instances', + }) + + await system.exec('docker compose down').catch((error: Error) => { + events.emit('registry.down', { + status: 'error', + operation: 'stopping-containers', + message: `An unexpected error occurred while stopping the registry: ${error.message} ${error.stack}`, + }) + }) + // Wait for the containers to stop + await until(allDown) + events.emit('registry.down', { + status: 'progress', + operation: 'remove-file', + message: 'Removing init files', + }) + filesystem.remove(path.resolve(process.cwd(), 'registry.yaml')) + events.emit('registry.down', { + status: 'success', + operation: 'remove-file', + message: 'Removing init files', + }) + events.emit('registry.down', { + status: 'success', + operation: 'stopping-containers', + message: 'Successfully stopped all services!', + }) } const allDown = async (): Promise => { - // List the containers - const rawJson = JSON.parse( - await system.run('docker compose ps --format json') - ) - - for (const rawInfo of rawJson) { - if (rawInfo.State !== 'exited') { - return false - } - } - - return true -} \ No newline at end of file + // List the containers + const rawJson = JSON.parse( + await system.run('docker compose ps --format json') + ) + + for (const rawInfo of rawJson) { + if (rawInfo.State !== 'exited') { + return false + } + } + + return true +} diff --git a/tools/cli/src/toolbox/registry/health.ts b/tools/cli/src/toolbox/registry/health.ts index 36c470798..3fe7a1ec6 100644 --- a/tools/cli/src/toolbox/registry/health.ts +++ b/tools/cli/src/toolbox/registry/health.ts @@ -1,7 +1,13 @@ // @/toolbox/registry/health // View registry health -import {ApiResponse, RegistryContainer, RegistryHealth, RegistryHealthResponse, Toolbox} from '../../types' +import { + ApiResponse, + RegistryContainer, + RegistryHealth, + RegistryHealthResponse, + Toolbox, +} from '../../types' // Accept a toolbox, return a registry health viewer export default async (toolbox: Toolbox): Promise => { @@ -16,16 +22,19 @@ export default async (toolbox: Toolbox): Promise => { baseURL: 'http://localhost:8081', headers: { Accept: 'application/json' }, }) - let ok: true | false, data: unknown; - ({ok, data} = await registryApi.get('/health')); + let ok: true | false, data: unknown + ;({ ok, data } = await registryApi.get('/health')) const response = data as RegistryHealthResponse // List containers print.info(ok) - const health : RegistryHealth[] = response.result.checks.map(check => { + const health: RegistryHealth[] = response.result.checks.map((check) => { return { name: check.name, - status: check.healthy && check.err.length === 0 ? "UP" : "DOWN", - err: check.healthy && check.err.length === 0 ? "" : (check.err + " : " + check.errmsg) + status: check.healthy && check.err.length === 0 ? 'UP' : 'DOWN', + err: + check.healthy && check.err.length === 0 + ? '' + : check.err + ' : ' + check.errmsg, } }) @@ -40,7 +49,7 @@ export default async (toolbox: Toolbox): Promise => { // A helper function to check if all the containers are up and running import { system } from 'gluegun' -import {ApiOkResponse} from "apisauce"; +import { ApiOkResponse } from 'apisauce' export const allUp = async (): Promise => { // List the containers const rawJson = JSON.parse( diff --git a/tools/cli/src/toolbox/registry/helpers/keycloak.ts b/tools/cli/src/toolbox/registry/helpers/keycloak.ts index 6d4e862c5..a8f8a5d36 100644 --- a/tools/cli/src/toolbox/registry/helpers/keycloak.ts +++ b/tools/cli/src/toolbox/registry/helpers/keycloak.ts @@ -5,6 +5,7 @@ import { http } from 'gluegun' import { ApisauceInstance } from 'apisauce' import { ApiResponse } from '../../../types' +import { config } from '../../../config/config' // Utility methods const convertToUrlEncodedForm = (data: Record): string => { @@ -31,30 +32,69 @@ class KeycloakWrapper { // Return an access token async getAccessToken(): Promise { - const response = (await this.httpClient.post( - '/auth/realms/master/protocol/openid-connect/token', - convertToUrlEncodedForm({ + let maxRetries = config.maximumRetries; + let retryCount = 0; + while (retryCount < maxRetries) { + try { + const response = await this.httpClient.post( + '/auth/realms/master/protocol/openid-connect/token', + convertToUrlEncodedForm({ client_id: 'admin-cli', username: this.user, password: this.pass, grant_type: 'password', - }), - { + }), + { headers: { - 'content-type': 'application/x-www-form-urlencoded', + 'content-type': 'application/x-www-form-urlencoded', }, - } - )) as ApiResponse - if (!response.ok) { - console.debug(response.originalError) - throw new Error( - `There was an error while retrieving an access token from keycloak: ${ - response.originalError ?? response.problem + } + ) as ApiResponse; + + if (response.ok) { + return response.data.access_token; + } else { + if (retryCount === maxRetries -1 ) console.debug(response.originalError); + throw new Error( + `There was an error while retrieving an access token from Keycloak: ${ + response.originalError ?? response.problem }` - ) + ); + } + } catch (error) { + // console.error(`API call failed. Retrying... (${retryCount + 1}/${maxRetries})`); + retryCount++; + // You can adjust the delay time as needed + await new Promise((resolve) => setTimeout(resolve, 1000)); // 1 second delay + } } + + throw new Error(`API call failed to fetch token from keycloak after ${maxRetries} retries.`); + + // const response = (await this.httpClient.post( + // '/auth/realms/master/protocol/openid-connect/token', + // convertToUrlEncodedForm({ + // client_id: 'admin-cli', + // username: this.user, + // password: this.pass, + // grant_type: 'password', + // }), + // { + // headers: { + // 'content-type': 'application/x-www-form-urlencoded', + // }, + // } + // )) as ApiResponse + // if (!response.ok) { + // console.debug(response.originalError) + // throw new Error( + // `There was an error while retrieving an access token from keycloak: ${ + // response.originalError ?? response.problem + // }` + // ) + // } - return response.data.access_token + // return response.data.access_token } // Get the keycloak client ID of a client @@ -85,12 +125,13 @@ class KeycloakWrapper { // Regenerate the client secret for a client in keycloak async regenerateClientSecret(internalClientId: string): Promise { + let token = await this.getAccessToken(); const response = (await this.httpClient.post( `/auth/admin/realms/${this.realm}/clients/${internalClientId}/client-secret`, {}, { headers: { - authorization: `Bearer ${await this.getAccessToken()}`, + authorization: `Bearer ${token}`, }, } )) as ApiResponse diff --git a/tools/cli/src/toolbox/registry/restart.ts b/tools/cli/src/toolbox/registry/restart.ts index 20753ccfc..d18fae63a 100644 --- a/tools/cli/src/toolbox/registry/restart.ts +++ b/tools/cli/src/toolbox/registry/restart.ts @@ -8,7 +8,7 @@ import { Toolbox } from '../../types' // Accept a toolbox, return a registry restart viewer export default async (toolbox: Toolbox, soft: boolean) => { const { events, system, until } = toolbox - + events.emit('registry.restart', { status: 'progress', operation: 'restart-registry', diff --git a/tools/cli/src/types.ts b/tools/cli/src/types.ts index 3685d48e6..4f8849311 100644 --- a/tools/cli/src/types.ts +++ b/tools/cli/src/types.ts @@ -13,7 +13,6 @@ export interface RegistryContainer { ports: number[] } - export interface Environment { check(registryPath?: string): Promise } @@ -22,7 +21,7 @@ export interface Registry { status(): Promise restart(soft: boolean): Promise config(): Promise - down (): Promise + down(): Promise health(): Promise } @@ -68,6 +67,13 @@ export interface RegistrySetupOptions { keycloakAdminPass: string pathToEntitySchemas: 'use-example-config' | string pathToConsentConfiguration: 'use-example-config' | string + enableRegistryAuthentication: boolean + elasticSearchEnabled: boolean + enableVCIssuance: boolean + asyncEnabled: boolean + managerType: string + searchProvideName: 'dev.sunbirdrc.registry.service.NativeSearchService' | string + auxiliaryServicesToBeEnabled: Array | Array } export interface RegistryTearDownOptions { @@ -75,38 +81,38 @@ export interface RegistryTearDownOptions { } export interface RegistryHealthResponse { - id: string; - ver: string; - ets: number; - params: Params; - responseCode: string; - result: Result; + id: string + ver: string + ets: number + params: Params + responseCode: string + result: Result } interface Params { - resmsgid: string; - msgid: string; - err: string; - status: string; - errmsg: string; + resmsgid: string + msgid: string + err: string + status: string + errmsg: string } interface Result { - name: string; - healthy: boolean; - checks: Check[]; + name: string + healthy: boolean + checks: Check[] } interface Check { - name: string; - healthy: boolean; - err: string; - errmsg: string; + name: string + healthy: boolean + err: string + errmsg: string } - export interface RegistryHealth { name: string status: 'UP' | 'DOWN' err: string -} \ No newline at end of file +} + From adb42d439d23043aaa76f1bc1e36e17ceaa85eeb Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Thu, 14 Sep 2023 10:14:33 +0530 Subject: [PATCH 02/11] RC_802: Implemented Auto Generation of keys and New checks for attestation and signer funcitonlities --- docker-compose.yml | 3 +- tools/cli/package.json | 1 + tools/cli/src/commands/init.ts | 174 +++++++++++++----- tools/cli/src/config/config.ts | 82 +++++++++ tools/cli/src/templates/.env-cli | 2 + tools/cli/src/toolbox/registry/create.ts | 119 ++++++++---- .../src/toolbox/registry/helpers/keycloak.ts | 75 ++++---- tools/cli/src/toolbox/utils.ts | 22 +++ tools/cli/src/types.ts | 11 +- 9 files changed, 367 insertions(+), 122 deletions(-) create mode 100644 tools/cli/src/config/config.ts create mode 100644 tools/cli/src/toolbox/utils.ts diff --git a/docker-compose.yml b/docker-compose.yml index c8335d722..efb1a00d5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -62,11 +62,12 @@ services: - sunbird_sso_admin_client_id=${KEYCLOAK_ADMIN_CLIENT_ID-admin-api} - sunbird_sso_client_id=${KEYCLOAK_CLIENT_ID-registry-frontend} - sunbird_sso_admin_client_secret=${KEYCLOAK_SECRET} + - claims_enabled=${CLAIMS_ENABLED-false} - claims_url=http://claim-ms:8082 - sign_url=http://certificate-signer:8079/sign - verify_url=http://certificate-signer:8079/verify - sign_health_check_url=http://certificate-signer:8079/health - - signature_enabled=true + - signature_enabled=${SIGNATURE_ENABLED-true} - pdf_url=http://certificate-api:8078/api/v1/certificatePDF - certificate_health_check_url=http://certificate-api:8078/health - template_base_url=http://registry:8081/api/v1/templates/ #Looks for certificate templates for pdf copy of the signed certificate diff --git a/tools/cli/package.json b/tools/cli/package.json index ca9f46186..d1079d408 100644 --- a/tools/cli/package.json +++ b/tools/cli/package.json @@ -50,6 +50,7 @@ "apisauce": "2.1.5", "extract-zip": "2.0.1", "gluegun": "4.7.1", + "keypair": "^1.0.4", "update-notifier": "5.1.0", "yaml": "1.10.2" }, diff --git a/tools/cli/src/commands/init.ts b/tools/cli/src/commands/init.ts index 23cf53b68..f5792317c 100644 --- a/tools/cli/src/commands/init.ts +++ b/tools/cli/src/commands/init.ts @@ -4,7 +4,12 @@ import path from 'path' -import { CLIEvent, RegistrySetupOptions, Toolbox } from '../types' +import { + CLIEvent, + RegistrySetupOptions, + Toolbox, + SignatureOptions, +} from '../types' import { config } from '../config/config' export default { @@ -94,27 +99,13 @@ export default { name: 'keycloakAdminPass', initial: 'admin', }, - { - type: 'input', - message: print.colors.reset( - 'Enter the path to a directory containing entity schemas' - ), - name: 'pathToEntitySchemas', - initial: 'use-example-config', - }, - { - type: 'input', - message: print.colors.reset( - 'Enter the path to a file containing consent configuration' - ), - name: 'pathToConsentConfiguration', - initial: 'use-example-config', - }, { type: 'confirm', - message: print.colors.reset( - 'Enable authentication in the system' - ), + message: + print.colors.reset('Enable authentication') + + print.colors.yellow( + `(Enabling this will help you authenticate the enitity for crud operations based on the roles configurations defined in your schema)` + ), name: 'enableRegistryAuthentication', initial: true, }, @@ -128,54 +119,149 @@ export default { }, { type: 'confirm', - message: print.colors.reset( - 'Do you want to enable elastic search' - ), - name: 'elasticSearchEnabled', + message: print.colors.reset('Enable attestation workflow'), + name: 'enableAttestation', initial: false, }, { type: 'confirm', - message: print.colors.reset( - 'Do you want to enable signature service in RC ?' - ), - name: 'signatureEnabled', - initial: true, + message: + print.colors.reset('Enable elastic search ') + + print.colors.yellow( + `(This will make sure your search queries are much faster)` + ), + name: 'elasticSearchEnabled', + initial: false, }, { type: 'confirm', - message: print.colors.reset( - 'Are you using Sunbird RC to issue Verifiable credentials' - ), + message: + print.colors.reset('Do you want to issue verifiable credentials ') + + print.colors.yellow( + `(This will enable cerificate api service which is used to generate certificates)` + ), name: 'enableVCIssuance', - initial: true, + initial: false, }, { type: 'select', - message: print.colors.reset( - 'Select a manager type ' - ) + print.colors.yellow('(if using a single instance of registry, set this value to DefinitionsManager else set to DistributedDefinitionsManager)'), + message: + print.colors.reset( + 'How do you want to persist the schema definitions ' + ) + + print.colors.yellow( + ` - if using a single instance of registry, set this value to Definitions Manager which save's the schema definations runtime. Else, set it to Distributed Definitions Manager which persists the schema defiantions in redis` + ), name: 'managerType', choices: Object.keys(config.definationMangerTypes), }, + ]) + + let autoGenerateKeyOptions = {} + let signatureOptions: SignatureOptions = { + signatureEnabled: false, + } + let importdirectories = {} + let auxiliaryServices = {} + + // Checks for enabling the signature service if attestation flow is not enabled + if (!options.enableAttestation) { + signatureOptions = await prompt.ask([ + { + type: 'confirm', + message: + print.colors.reset('Enable signing ') + + print.colors.yellow( + `(Enabling this will make sure to create a signature for a document/entity by using the credential template defined in your schema)` + ), + name: 'signatureEnabled', + initial: false, + }, + ]) + } else { + signatureOptions.signatureEnabled = true + } + + // Check for auto generation of keys if signature service is enabled + if (signatureOptions?.signatureEnabled) { + autoGenerateKeyOptions = await prompt.ask([ + { + type: 'confirm', + message: + print.colors.reset( + 'Generate new public/private keys for signing ' + ) + print.colors.yellow(` - or use the default keys`), + name: 'autoGenerateKeys', + initial: false, + }, + ]) + } + + // Checks for import directories for schemas and consent module + importdirectories = await prompt.ask([ + { + type: 'input', + message: print.colors.reset( + 'Enter the path to a directory containing entity schemas' + ), + name: 'pathToEntitySchemas', + initial: 'use-example-config', + }, + { + type: 'input', + message: print.colors.reset( + 'Enter the path to a file containing consent configuration' + ), + name: 'pathToConsentConfiguration', + initial: 'use-example-config', + }, + ]) + + const url = + 'https://docs.sunbirdrc.dev/developer-documentation/notifications-configuration' + const linkText = + 'for more details about Sunbird RC configurations and its axuiliary services under the Developer Documentation' + + // ANSI escape codes to format the link + const formattedLink = `\u001b]8;;${url}\u0007${linkText}\u001b]8;;\u0007` + + print.info(print.colors.green.bold(`Ctrl click here - ${formattedLink}.`)) + + // Checks for auxiliary services if needed + auxiliaryServices = await prompt.ask([ { type: 'multiselect', name: 'auxiliaryServicesToBeEnabled', - message: print.colors.highlight( - 'Do you want to enable other auxiliary services ' - ) + print.colors.magenta('- Use SPACE BAR to select and unselect.'), + message: + print.colors.highlight( + 'Sunbird RC offers a variety of auxiliary services to improve platform functionality.' + ) + print.colors.magenta('- Use SPACE BAR to select and unselect.'), choices: Object.keys(config.auxiliary_services), }, ]) + print.info('') + let optionsToCheck = { + ...options, + ...signatureOptions, + ...importdirectories, + ...autoGenerateKeyOptions, + ...auxiliaryServices, + } // Setup the registry - print.debug(options); - await registry.create(options as unknown as RegistrySetupOptions) + // print.debug(options); + await registry.create(optionsToCheck as unknown as RegistrySetupOptions) print.info('') - print.highlight( - 'Sunbird-RC is configured with test/default keys for signing. It is required to be updated `imports/config.json` before going live/production' - ) + if (options.autoGenerateKeys) { + print.highlight( + 'Sunbird-RC is configured with auto generated keys for signing.' + ) + } else { + print.highlight( + 'Sunbird-RC is configured with test/default keys for signing. It is required to be updated `imports/config.json` before going live/production' + ) + } }, } diff --git a/tools/cli/src/config/config.ts b/tools/cli/src/config/config.ts new file mode 100644 index 000000000..7ff0200e4 --- /dev/null +++ b/tools/cli/src/config/config.ts @@ -0,0 +1,82 @@ + +export interface Config { + DEFAULT_ES_PROVIDER_NAME: string + DEFAULT_NS_PROVIDER_NAME: string + docker_service_name: { + ES: string + DB: string + REGISTRY: string + KEYCLOAK: string + FILE_STORAGE: string + CLAIMS_MS: string + CERTIFICATE_SIGHNER: string + PUBLIC_KEY_SERVICE: string + CERTIFICATE_API: string + NOTIFICATION_MS: string + ZOOKEEPER: string + KAFKA: string + CONTEXT_PROXY_SERVICE: string + NGINIX: string + METRICS: string + CLICKHOUSE: string + REDIS: string + DIGI_LOCKER: string + BULK_ISSUANCE: string + } + auxiliary_services: AuxiliaryServices + definationMangerTypes: DefinationsManager + maximumRetries: number +} + +interface AuxiliaryServices { + [serviceName: string]: string +} + +interface DefinationsManager { + [name: string]: string +} + +const auxiliary_services: AuxiliaryServices = { + 'Notifications Service': 'notification-ms', + 'Context Proxy Service': 'context-proxy-service', + Nginix: 'nginx', + 'Metrics Service': 'kafka clickhouse metrics', + 'Bulk Issuance Service': 'bulk_issuance', + 'Digilocker Certificate Service': 'digilocker-certificate-api', +} + +const definationsManagers = { + 'Definitions Manager': 'DefinitionsManager', + 'Distributed Definitions Manager': 'DistributedDefinitionsManager', +} + +export let config: Config = { + DEFAULT_ES_PROVIDER_NAME: + 'dev.sunbirdrc.registry.service.ElasticSearchService', + DEFAULT_NS_PROVIDER_NAME: + 'dev.sunbirdrc.registry.service.NativeSearchService', + docker_service_name: { + ES: 'es', + DB: 'db', + REGISTRY: 'registry', + KEYCLOAK: 'keycloak', + FILE_STORAGE: 'file-storage', + CLAIMS_MS: 'claim-ms', + CERTIFICATE_SIGHNER: 'certificate-signer', + PUBLIC_KEY_SERVICE: 'public-key-service', + CERTIFICATE_API: 'certificate-api', + NOTIFICATION_MS: 'notification-ms', + ZOOKEEPER: 'zookeeper', + KAFKA: 'kafka', + CONTEXT_PROXY_SERVICE: 'context-proxy-service', + NGINIX: 'nginx', + METRICS: 'metrics', + CLICKHOUSE: 'clickhouse', + REDIS: 'redis', + DIGI_LOCKER: 'digilocker-certificate-api', + BULK_ISSUANCE: 'bulk_issuance', + }, + auxiliary_services: auxiliary_services, + definationMangerTypes: definationsManagers, + maximumRetries: 30, +} diff --git a/tools/cli/src/templates/.env-cli b/tools/cli/src/templates/.env-cli index 94d94ab43..ba6d2dab8 100644 --- a/tools/cli/src/templates/.env-cli +++ b/tools/cli/src/templates/.env-cli @@ -9,3 +9,5 @@ ASYNC_ENABLED=<%= props.asyncEnabled %> MANAGER_TYPE=<%= props.managerType %> SIGNATURE_ENABLED=<%= props.signatureEnabled %> SEARCH_PROVIDER_NAME=<%= props.searchProvideName %> +EVENT_ENABLED=<%= props.eventEnabled %> +CLAIMS_ENABLED=<%= props.enableAttestation %> diff --git a/tools/cli/src/toolbox/registry/create.ts b/tools/cli/src/toolbox/registry/create.ts index 0652c8ca3..62bb00e46 100644 --- a/tools/cli/src/toolbox/registry/create.ts +++ b/tools/cli/src/toolbox/registry/create.ts @@ -5,10 +5,11 @@ import path from 'path' import KeycloakWrapper from './helpers/keycloak' import { allUp } from './status' -import {config} from '../../config/config' -var keypair = require('keypair'); +import { config } from '../../config/config' +var keypair = require('keypair') import { RegistrySetupOptions, Toolbox } from '../../types' +import formatKey from '../utils' // Accept a toolbox and configuration, create a registry instance in return export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { @@ -22,57 +23,73 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { config.docker_service_name.DB, config.docker_service_name.REGISTRY, config.docker_service_name.KEYCLOAK, - config.docker_service_name.CLAIMS_MS, - config.docker_service_name.CERTIFICATE_SIGHNER, - config.docker_service_name.FILE_STORAGE ] // Enable redis for distributed systems - if (setupOptions?.managerType === Object.keys(config.definationMangerTypes)[1]) { - enableTheseServices.push(config.docker_service_name.REDIS); + if ( + setupOptions?.managerType === Object.keys(config.definationMangerTypes)[1] + ) { + enableTheseServices.push(config.docker_service_name.REDIS) + } + + //Enable claims for attestation work flows + if (setupOptions?.enableAttestation) { + enableTheseServices.push(config.docker_service_name.CLAIMS_MS) + } + + //Enable Certificate Signer service + if (setupOptions?.signatureEnabled) { + enableTheseServices.push( + config.docker_service_name.CERTIFICATE_SIGHNER, + config.docker_service_name.FILE_STORAGE + ) } - setupOptions.managerType = config.definationMangerTypes[setupOptions?.managerType] - // Check and Enable Elastic Search + + // Set ManagerType + setupOptions.managerType = + config.definationMangerTypes[setupOptions?.managerType] + + // Check and Enable Elastic Search if (setupOptions?.elasticSearchEnabled) { - setupOptions['searchProvideName'] = config.DEFAULT_ES_PROVIDER_NAME; - enableTheseServices.unshift(config.docker_service_name.ES); - } else setupOptions['searchProvideName'] = config.DEFAULT_NS_PROVIDER_NAME; + setupOptions['searchProvideName'] = config.DEFAULT_ES_PROVIDER_NAME + enableTheseServices.unshift(config.docker_service_name.ES) + } else setupOptions['searchProvideName'] = config.DEFAULT_NS_PROVIDER_NAME - // Check and Enable Elastic Search + // Check and Enable Kafka if (setupOptions?.asyncEnabled) { - enableTheseServices.push(config.docker_service_name.KAFKA); + enableTheseServices.push(config.docker_service_name.KAFKA) } // enable certificate API service if (setupOptions?.enableVCIssuance) { - enableTheseServices.push(config.docker_service_name.CERTIFICATE_API) + enableTheseServices.push( + config.docker_service_name.CERTIFICATE_API, + config.docker_service_name.FILE_STORAGE + ) } // enable Auxiliary services - if (setupOptions?.auxiliaryServicesToBeEnabled.length > 0 ) { - setupOptions?.auxiliaryServicesToBeEnabled.forEach( (i : string) => enableTheseServices.push(config.auxiliary_services[i])) + if (setupOptions?.auxiliaryServicesToBeEnabled.length > 0) { + setupOptions?.auxiliaryServicesToBeEnabled.forEach((i: string) => + enableTheseServices.push(config.auxiliary_services[i]) + ) } - console.log(setupOptions); - let dockerCommand = 'docker compose up -d ' - let conditionalEnablinOfDockerCommand = dockerCommand + enableTheseServices.join(' '); - console.log(conditionalEnablinOfDockerCommand); - - let deafultTemplateForKeys = require('../../templates/config.json'); - var pair = keypair(); - console.log( "before",deafultTemplateForKeys); - deafultTemplateForKeys.issuers.default.publicKey = pair.public; - deafultTemplateForKeys.issuers.default.privateKey = pair.private; - console.log( "after ",deafultTemplateForKeys); - - // Convert the new object to JSON - const newConfigJson = JSON.stringify(deafultTemplateForKeys, null, 2); - - // Specify the path to the config.json file - const configFilePath = 'imports/config.json'; + // Check for metrics and enable the events enabled flag on for registry + if ( + setupOptions.auxiliaryServicesToBeEnabled.includes( + Object.keys(config.auxiliary_services)[4] + ) + ) { + setupOptions.eventEnabled = true + } else setupOptions.eventEnabled = false + // console.log(setupOptions); + let dockerCommand = 'docker compose up -d ' + let conditionalEnablinOfDockerCommand = + dockerCommand + enableTheseServices.join(' ') + // console.log(conditionalEnablinOfDockerCommand); - // Copy over config files with the proper variables events.emit('registry.create', { status: 'progress', @@ -157,11 +174,32 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { }) } - // Write the new JSON content to the file, replacing the old content - filesystem.write(configFilePath, newConfigJson); + // Auto generation of keys logic + if (setupOptions.autoGenerateKeys) { + // Specify the path to the config.json file + const configFilePath = 'imports/config.json' + let deafultTemplateForKeys = require(configFilePath) + var pair = keypair() + deafultTemplateForKeys.issuers.default.publicKey = formatKey( + pair.public, + 'public' + ) + deafultTemplateForKeys.issuers.default.privateKey = formatKey( + pair.private, + 'private' + ) + // Convert the new object to JSON + const newConfigJson = JSON.stringify(deafultTemplateForKeys, null, 2) + + // Write the new JSON content to the file, replacing the old content + filesystem.write(configFilePath, newConfigJson) + events.emit('registry.create', { + status: 'success', + operation: 'Auto generating keys', + message: 'Successfully generated keys for signing', + }) + } - console.log(`Updated ${configFilePath} with new content.`); - events.emit('registry.create', { status: 'success', operation: 'copying-files', @@ -172,7 +210,8 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { events.emit('registry.create', { status: 'progress', operation: 'starting-containers', - message: 'Starting all services', + message: + 'Starting all services. Please be patient, as this operation may require some time to complete.', }) //merge multiple env files await system.run('cat .env-cli >> .env').catch((error: Error) => { diff --git a/tools/cli/src/toolbox/registry/helpers/keycloak.ts b/tools/cli/src/toolbox/registry/helpers/keycloak.ts index a8f8a5d36..2ede05690 100644 --- a/tools/cli/src/toolbox/registry/helpers/keycloak.ts +++ b/tools/cli/src/toolbox/registry/helpers/keycloak.ts @@ -32,44 +32,47 @@ class KeycloakWrapper { // Return an access token async getAccessToken(): Promise { - let maxRetries = config.maximumRetries; - let retryCount = 0; + let maxRetries = config.maximumRetries + let retryCount = 0 while (retryCount < maxRetries) { - try { - const response = await this.httpClient.post( - '/auth/realms/master/protocol/openid-connect/token', - convertToUrlEncodedForm({ - client_id: 'admin-cli', - username: this.user, - password: this.pass, - grant_type: 'password', - }), - { - headers: { - 'content-type': 'application/x-www-form-urlencoded', - }, - } - ) as ApiResponse; - - if (response.ok) { - return response.data.access_token; - } else { - if (retryCount === maxRetries -1 ) console.debug(response.originalError); - throw new Error( - `There was an error while retrieving an access token from Keycloak: ${ - response.originalError ?? response.problem - }` - ); + try { + const response = (await this.httpClient.post( + '/auth/realms/master/protocol/openid-connect/token', + convertToUrlEncodedForm({ + client_id: 'admin-cli', + username: this.user, + password: this.pass, + grant_type: 'password', + }), + { + headers: { + 'content-type': 'application/x-www-form-urlencoded', + }, + } + )) as ApiResponse + + if (response.ok) { + return response.data.access_token + } else { + if (retryCount === maxRetries - 1) + console.debug(response.originalError) + throw new Error( + `There was an error while retrieving an access token from Keycloak: ${ + response.originalError ?? response.problem + }` + ) + } + } catch (error) { + // console.error(`API call failed. Retrying... (${retryCount + 1}/${maxRetries})`); + retryCount++ + // You can adjust the delay time as needed + await new Promise((resolve) => setTimeout(resolve, 1000)) // 1 second delay } - } catch (error) { - // console.error(`API call failed. Retrying... (${retryCount + 1}/${maxRetries})`); - retryCount++; - // You can adjust the delay time as needed - await new Promise((resolve) => setTimeout(resolve, 1000)); // 1 second delay - } } - - throw new Error(`API call failed to fetch token from keycloak after ${maxRetries} retries.`); + + throw new Error( + `API call failed to fetch token from keycloak after ${maxRetries} retries.` + ) // const response = (await this.httpClient.post( // '/auth/realms/master/protocol/openid-connect/token', @@ -125,7 +128,7 @@ class KeycloakWrapper { // Regenerate the client secret for a client in keycloak async regenerateClientSecret(internalClientId: string): Promise { - let token = await this.getAccessToken(); + let token = await this.getAccessToken() const response = (await this.httpClient.post( `/auth/admin/realms/${this.realm}/clients/${internalClientId}/client-secret`, {}, diff --git a/tools/cli/src/toolbox/utils.ts b/tools/cli/src/toolbox/utils.ts new file mode 100644 index 000000000..6d2fc8163 --- /dev/null +++ b/tools/cli/src/toolbox/utils.ts @@ -0,0 +1,22 @@ +export default function formatKey(key: string, keyType: string) { + let prefix = + keyType === 'public' + ? '-----BEGIN PUBLIC KEY-----\n' + : '-----BEGIN RSA PRIVATE KEY-----\n' + let suffix = + keyType === 'public' + ? '\n-----END PUBLIC KEY-----\n' + : '\n-----END RSA PRIVATE KEY-----\n' + + if (key) { + const lines = key.split('\n') + lines.shift() + lines.pop() + lines.pop() + return prefix + lines.join('') + suffix + } else { + throw new Error( + 'There was an error while formating the auto generated keys!' + ) + } +} diff --git a/tools/cli/src/types.ts b/tools/cli/src/types.ts index 4f8849311..ea6a3b3c7 100644 --- a/tools/cli/src/types.ts +++ b/tools/cli/src/types.ts @@ -72,8 +72,14 @@ export interface RegistrySetupOptions { enableVCIssuance: boolean asyncEnabled: boolean managerType: string - searchProvideName: 'dev.sunbirdrc.registry.service.NativeSearchService' | string + searchProvideName: + | 'dev.sunbirdrc.registry.service.NativeSearchService' + | string auxiliaryServicesToBeEnabled: Array | Array + autoGenerateKeys: boolean + signatureEnabled: boolean + eventEnabled: boolean + enableAttestation: boolean } export interface RegistryTearDownOptions { @@ -116,3 +122,6 @@ export interface RegistryHealth { err: string } +export interface SignatureOptions { + signatureEnabled: boolean +} From 7d13521834b48eecd09dcad0cd72a222846a0388 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Thu, 14 Sep 2023 10:22:21 +0530 Subject: [PATCH 03/11] Removed unwanted changes in .env files and keycloak.ts --- .env | 215 ------------------ .../src/toolbox/registry/helpers/keycloak.ts | 26 +-- 2 files changed, 1 insertion(+), 240 deletions(-) diff --git a/.env b/.env index aeaf3981b..bd676a9b5 100644 --- a/.env +++ b/.env @@ -1,216 +1 @@ RELEASE_VERSION=v0.0.14 -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME= -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.NativeSearchService -SCHEMA_DIR=config/schemas -KEYCLOAK_CLIENT_ID=registry-frontend -KEYCLOAK_ADMIN_CLIENT_ID=admin-api -KEYCLOAK_REALM=sunbird-rc -KEYCLOAK_ADMIN_USER=admin -KEYCLOAK_ADMIN_PASSWORD=admin -AUTHENTICATION_ENABLED=true -ASYNC_ENABLED=false -MANAGER_TYPE=DefinitionsManager -SIGNATURE_ENABLED=true -SEARCH_PROVIDER_NAME=dev.sunbirdrc.registry.service.ElasticSearchService diff --git a/tools/cli/src/toolbox/registry/helpers/keycloak.ts b/tools/cli/src/toolbox/registry/helpers/keycloak.ts index 2ede05690..f7673c1b6 100644 --- a/tools/cli/src/toolbox/registry/helpers/keycloak.ts +++ b/tools/cli/src/toolbox/registry/helpers/keycloak.ts @@ -73,31 +73,7 @@ class KeycloakWrapper { throw new Error( `API call failed to fetch token from keycloak after ${maxRetries} retries.` ) - - // const response = (await this.httpClient.post( - // '/auth/realms/master/protocol/openid-connect/token', - // convertToUrlEncodedForm({ - // client_id: 'admin-cli', - // username: this.user, - // password: this.pass, - // grant_type: 'password', - // }), - // { - // headers: { - // 'content-type': 'application/x-www-form-urlencoded', - // }, - // } - // )) as ApiResponse - // if (!response.ok) { - // console.debug(response.originalError) - // throw new Error( - // `There was an error while retrieving an access token from keycloak: ${ - // response.originalError ?? response.problem - // }` - // ) - // } - - // return response.data.access_token + } // Get the keycloak client ID of a client From f8bb89055f0af3027e474f5a81514adf46ab6d02 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 12:17:34 +0530 Subject: [PATCH 04/11] FileStorage add on in the CLI --- docker-compose.yml | 2 +- tools/cli/src/config/config.ts | 1 - tools/cli/src/templates/.env | 0 tools/cli/src/templates/.env-cli | 1 + tools/cli/src/templates/config.json | 0 tools/cli/src/templates/docker-compose.yml | 0 tools/cli/src/toolbox/registry/create.ts | 4 ++++ tools/cli/src/toolbox/registry/helpers/keycloak.ts | 1 - tools/cli/src/types.ts | 1 + 9 files changed, 7 insertions(+), 3 deletions(-) mode change 100644 => 120000 tools/cli/src/templates/.env mode change 100644 => 120000 tools/cli/src/templates/config.json mode change 100644 => 120000 tools/cli/src/templates/docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml index 79d865aa6..2ce2307d8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,7 +74,7 @@ services: - certificate_health_check_url=http://certificate-api:8078/health - template_base_url=http://registry:8081/api/v1/templates/ #Looks for certificate templates for pdf copy of the signed certificate - sunbird_keycloak_user_set_password=true - - filestorage_enabled=false + - filestorage_enabled=${FILESSTORAGE_ENABLED-false} - filestorage_connection_url=http://file-storage:9000 - filestorage_access_key=admin - filestorage_secret_key=12345678 diff --git a/tools/cli/src/config/config.ts b/tools/cli/src/config/config.ts index 7ff0200e4..d978e2dd1 100644 --- a/tools/cli/src/config/config.ts +++ b/tools/cli/src/config/config.ts @@ -1,4 +1,3 @@ - export interface Config { DEFAULT_ES_PROVIDER_NAME: string DEFAULT_NS_PROVIDER_NAME: string diff --git a/tools/cli/src/templates/.env b/tools/cli/src/templates/.env deleted file mode 100644 index 8023cca10..000000000 --- a/tools/cli/src/templates/.env +++ /dev/null @@ -1 +0,0 @@ -../../../../.env \ No newline at end of file diff --git a/tools/cli/src/templates/.env b/tools/cli/src/templates/.env new file mode 120000 index 000000000..8023cca10 --- /dev/null +++ b/tools/cli/src/templates/.env @@ -0,0 +1 @@ +../../../../.env \ No newline at end of file diff --git a/tools/cli/src/templates/.env-cli b/tools/cli/src/templates/.env-cli index ba6d2dab8..ced412601 100644 --- a/tools/cli/src/templates/.env-cli +++ b/tools/cli/src/templates/.env-cli @@ -11,3 +11,4 @@ SIGNATURE_ENABLED=<%= props.signatureEnabled %> SEARCH_PROVIDER_NAME=<%= props.searchProvideName %> EVENT_ENABLED=<%= props.eventEnabled %> CLAIMS_ENABLED=<%= props.enableAttestation %> +FILESSTORAGE_ENABLED=<%= props.fileStorageEnabled %> diff --git a/tools/cli/src/templates/config.json b/tools/cli/src/templates/config.json deleted file mode 100644 index 98e9995de..000000000 --- a/tools/cli/src/templates/config.json +++ /dev/null @@ -1 +0,0 @@ -../../../../imports/config.json \ No newline at end of file diff --git a/tools/cli/src/templates/config.json b/tools/cli/src/templates/config.json new file mode 120000 index 000000000..98e9995de --- /dev/null +++ b/tools/cli/src/templates/config.json @@ -0,0 +1 @@ +../../../../imports/config.json \ No newline at end of file diff --git a/tools/cli/src/templates/docker-compose.yml b/tools/cli/src/templates/docker-compose.yml deleted file mode 100644 index b4d69e1fc..000000000 --- a/tools/cli/src/templates/docker-compose.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../docker-compose.yml \ No newline at end of file diff --git a/tools/cli/src/templates/docker-compose.yml b/tools/cli/src/templates/docker-compose.yml new file mode 120000 index 000000000..b4d69e1fc --- /dev/null +++ b/tools/cli/src/templates/docker-compose.yml @@ -0,0 +1 @@ +../../../../docker-compose.yml \ No newline at end of file diff --git a/tools/cli/src/toolbox/registry/create.ts b/tools/cli/src/toolbox/registry/create.ts index 62bb00e46..0d5f81511 100644 --- a/tools/cli/src/toolbox/registry/create.ts +++ b/tools/cli/src/toolbox/registry/create.ts @@ -24,6 +24,8 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { config.docker_service_name.REGISTRY, config.docker_service_name.KEYCLOAK, ] + + setupOptions.fileStorageEnabled = false // Enable redis for distributed systems if ( @@ -43,6 +45,7 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { config.docker_service_name.CERTIFICATE_SIGHNER, config.docker_service_name.FILE_STORAGE ) + setupOptions.fileStorageEnabled = true } // Set ManagerType @@ -66,6 +69,7 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { config.docker_service_name.CERTIFICATE_API, config.docker_service_name.FILE_STORAGE ) + setupOptions.fileStorageEnabled = true } // enable Auxiliary services diff --git a/tools/cli/src/toolbox/registry/helpers/keycloak.ts b/tools/cli/src/toolbox/registry/helpers/keycloak.ts index f7673c1b6..d667b8f78 100644 --- a/tools/cli/src/toolbox/registry/helpers/keycloak.ts +++ b/tools/cli/src/toolbox/registry/helpers/keycloak.ts @@ -73,7 +73,6 @@ class KeycloakWrapper { throw new Error( `API call failed to fetch token from keycloak after ${maxRetries} retries.` ) - } // Get the keycloak client ID of a client diff --git a/tools/cli/src/types.ts b/tools/cli/src/types.ts index ea6a3b3c7..6225f79dd 100644 --- a/tools/cli/src/types.ts +++ b/tools/cli/src/types.ts @@ -80,6 +80,7 @@ export interface RegistrySetupOptions { signatureEnabled: boolean eventEnabled: boolean enableAttestation: boolean + fileStorageEnabled : boolean } export interface RegistryTearDownOptions { From 3de863b0ac47bc35d2ee9d2295db4f41ba483979 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 14:54:35 +0530 Subject: [PATCH 05/11] Errors logs for debug changes in the maven.yml file --- .github/workflows/maven.yml | 10 +++++----- tools/cli/src/toolbox/registry/restart.ts | 16 ++++++++++++++-- tools/cli/src/types.ts | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 843718b6a..c845902cb 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -23,11 +23,11 @@ jobs: - name: Set up properties run: sh configure-dependencies.sh # # debug step -# - name: Setup upterm session -# uses: lhotari/action-upterm@v1 -# with: -# ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie holashchand -# limit-access-to-actor: true + - name: Setup upterm session + uses: lhotari/action-upterm@v1 + with: + ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie holashchand + limit-access-to-actor: true - name: Build and test run: make test # test: diff --git a/tools/cli/src/toolbox/registry/restart.ts b/tools/cli/src/toolbox/registry/restart.ts index d18fae63a..3dda4219f 100644 --- a/tools/cli/src/toolbox/registry/restart.ts +++ b/tools/cli/src/toolbox/registry/restart.ts @@ -3,7 +3,7 @@ import { allUp } from './status' -import { Toolbox } from '../../types' +import { GitRawJson, Toolbox } from '../../types' // Accept a toolbox, return a registry restart viewer export default async (toolbox: Toolbox, soft: boolean) => { @@ -15,9 +15,21 @@ export default async (toolbox: Toolbox, soft: boolean) => { message: 'Restarting all registry containers', }) + // List containers + const rawJson = JSON.parse( + await system.run('docker compose ps --format json') + ) + + let activeContainer = rawJson.map((i:GitRawJson) => i.Service).join(' '); + + + let restartComamnd = 'docker compose up --force-recreate -d ' + activeContainer; + + console.log(restartComamnd); + await system .exec( - soft ? 'docker compose restart' : 'docker compose up --force-recreate -d' + soft ? 'docker compose restart' : restartComamnd ) .catch((error: Error) => { events.emit('registry.create', { diff --git a/tools/cli/src/types.ts b/tools/cli/src/types.ts index 6225f79dd..b989d80c8 100644 --- a/tools/cli/src/types.ts +++ b/tools/cli/src/types.ts @@ -126,3 +126,18 @@ export interface RegistryHealth { export interface SignatureOptions { signatureEnabled: boolean } + +export interface GitRawJson { + ID: string; + Name: string; + Image: string; + Command: string; + Project: string; + Service: string; + Created: number; + State: string; + Status: string; + Health: string; + ExitCode: number; + Publishers: any[]; // You can specify a more specific type if needed +} From b775e9f1efba3b2a64c680458b86478d21cbc627 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 15:08:53 +0530 Subject: [PATCH 06/11] Added SSH key for logs --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c845902cb..164403a6a 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,7 +26,7 @@ jobs: - name: Setup upterm session uses: lhotari/action-upterm@v1 with: - ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie holashchand + ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie Sreejith-K limit-access-to-actor: true - name: Build and test run: make test From 72938e6e6b03928bdf5ffe7f6ea30eafcb39148e Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 16:12:56 +0530 Subject: [PATCH 07/11] Changes in the docker file to make NativeSearch as the default search engine --- Makefile | 2 +- docker-compose.yml | 4 ++-- tools/cli/contributing.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index eec8b8f80..ff544ce15 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ test: build @docker-compose down @rm -rf db-data-1 || echo "no permission to delete" # test with kafka(async), events, notifications, - @docker-compose --env-file test_environments/test_with_asyncCreate_events_notifications.env up -d db clickhouse redis es keycloak registry certificate-signer certificate-api kafka zookeeper notification-ms metrics + @docker-compose --env-file test_environments/test_with_asyncCreate_events_notifications.env up -d db clickhouse redis keycloak registry certificate-signer certificate-api kafka zookeeper notification-ms metrics @echo "Starting the test" && sh build/wait_for_port.sh 8080 @echo "Starting the test" && sh build/wait_for_port.sh 8081 @docker-compose ps diff --git a/docker-compose.yml b/docker-compose.yml index 2ce2307d8..efedbe77c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -57,7 +57,7 @@ services: - elastic_search_auth_enabled=${ELASTIC_SECURITY_ENABLED-false} - elastic_search_username=${ELASTIC_SEARCH_USERNAME-elastic} - elastic_search_password=${ELASTIC_SEARCH_PASSWORD} - - search_providerName=${SEARCH_PROVIDER_NAME-dev.sunbirdrc.registry.service.ElasticSearchService} + - search_providerName=${SEARCH_PROVIDER_NAME-dev.sunbirdrc.registry.service.NativeSearchService} - sunbird_sso_realm=${KEYCLOAK_REALM-sunbird-rc} - sunbird_sso_url=http://keycloak:8080/auth - sunbird_sso_admin_client_id=${KEYCLOAK_ADMIN_CLIENT_ID-admin-api} @@ -134,7 +134,7 @@ services: - '9990:9990' depends_on: db: - condition: service_started + condition: service_healthy claim-ms: image: ghcr.io/sunbird-rc/sunbird-rc-claim-ms:${RELEASE_VERSION} environment: diff --git a/tools/cli/contributing.md b/tools/cli/contributing.md index 7d5e38aba..bb1ebe6f5 100644 --- a/tools/cli/contributing.md +++ b/tools/cli/contributing.md @@ -73,7 +73,7 @@ v16.13.0 Once NodeJS is installed, run the following in terminal to install PNPM: ```sh -$ sudo npm install --global pnpm@6.20.1 +$ sudo npm install --global pnpm ``` Run `pnpm --version` in the terminal if PNPM has been installed correctly: From cd7564908dfd341beb7a9c9ee9c9c072f7cd3d9c Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 16:37:52 +0530 Subject: [PATCH 08/11] Commented the code for debug in the maven.yml file --- .github/workflows/maven.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 164403a6a..92d5bdd3e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -23,13 +23,13 @@ jobs: - name: Set up properties run: sh configure-dependencies.sh # # debug step - - name: Setup upterm session - uses: lhotari/action-upterm@v1 - with: - ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie Sreejith-K - limit-access-to-actor: true - - name: Build and test - run: make test + # - name: Setup upterm session + # uses: lhotari/action-upterm@v1 + # with: + # ## limits ssh access and adds the ssh public key for the user which triggered the workflow ie Sreejith-K + # limit-access-to-actor: true + # - name: Build and test + # run: make test # test: # runs-on: ubuntu-latest # steps: From 746f1d39265354f58df41eab74cfbe27c2aed511 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Tue, 19 Sep 2023 18:21:23 +0530 Subject: [PATCH 09/11] removed pnpm sepcific version and added padding in the CLI interface along with a few minor changes in the restart process --- tools/cli/package.json | 2 +- tools/cli/src/commands/init.ts | 1 + tools/cli/src/toolbox/registry/create.ts | 5 ++++- tools/cli/src/toolbox/registry/restart.ts | 12 ++++------- tools/cli/src/types.ts | 26 +++++++++++------------ 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tools/cli/package.json b/tools/cli/package.json index d1079d408..9af2259f2 100644 --- a/tools/cli/package.json +++ b/tools/cli/package.json @@ -70,7 +70,7 @@ }, "pnpm": { "overrides": { - "ansi-regex@>3.0.1 <5.0.1": ">=5.0.1", + "ansi-regex@>2.1.1 <5.0.1": ">=5.0.1", "yargs-parser@>=16.0.0 <18.1.2": ">=18.1.2", "follow-redirects@<1.14.7": ">=1.14.7" } diff --git a/tools/cli/src/commands/init.ts b/tools/cli/src/commands/init.ts index f5792317c..e32019ee5 100644 --- a/tools/cli/src/commands/init.ts +++ b/tools/cli/src/commands/init.ts @@ -225,6 +225,7 @@ export default { // ANSI escape codes to format the link const formattedLink = `\u001b]8;;${url}\u0007${linkText}\u001b]8;;\u0007` + print.info('') print.info(print.colors.green.bold(`Ctrl click here - ${formattedLink}.`)) // Checks for auxiliary services if needed diff --git a/tools/cli/src/toolbox/registry/create.ts b/tools/cli/src/toolbox/registry/create.ts index 0d5f81511..3180b6254 100644 --- a/tools/cli/src/toolbox/registry/create.ts +++ b/tools/cli/src/toolbox/registry/create.ts @@ -24,7 +24,7 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { config.docker_service_name.REGISTRY, config.docker_service_name.KEYCLOAK, ] - + setupOptions.fileStorageEnabled = false // Enable redis for distributed systems @@ -192,6 +192,9 @@ export default async (toolbox: Toolbox, setupOptions: RegistrySetupOptions) => { pair.private, 'private' ) + deafultTemplateForKeys.issuers.default['$comment'] = + 'The above are auto generated keys !!' + // Convert the new object to JSON const newConfigJson = JSON.stringify(deafultTemplateForKeys, null, 2) diff --git a/tools/cli/src/toolbox/registry/restart.ts b/tools/cli/src/toolbox/registry/restart.ts index 3dda4219f..b3973bae7 100644 --- a/tools/cli/src/toolbox/registry/restart.ts +++ b/tools/cli/src/toolbox/registry/restart.ts @@ -20,17 +20,13 @@ export default async (toolbox: Toolbox, soft: boolean) => { await system.run('docker compose ps --format json') ) - let activeContainer = rawJson.map((i:GitRawJson) => i.Service).join(' '); + let activeContainer = rawJson.map((i: GitRawJson) => i.Service).join(' ') - - let restartComamnd = 'docker compose up --force-recreate -d ' + activeContainer; - - console.log(restartComamnd); + let restartComamnd = + 'docker compose up --force-recreate -d ' + activeContainer await system - .exec( - soft ? 'docker compose restart' : restartComamnd - ) + .exec(soft ? 'docker compose restart' : restartComamnd) .catch((error: Error) => { events.emit('registry.create', { status: 'error', diff --git a/tools/cli/src/types.ts b/tools/cli/src/types.ts index b989d80c8..7fc9c8a77 100644 --- a/tools/cli/src/types.ts +++ b/tools/cli/src/types.ts @@ -80,7 +80,7 @@ export interface RegistrySetupOptions { signatureEnabled: boolean eventEnabled: boolean enableAttestation: boolean - fileStorageEnabled : boolean + fileStorageEnabled: boolean } export interface RegistryTearDownOptions { @@ -128,16 +128,16 @@ export interface SignatureOptions { } export interface GitRawJson { - ID: string; - Name: string; - Image: string; - Command: string; - Project: string; - Service: string; - Created: number; - State: string; - Status: string; - Health: string; - ExitCode: number; - Publishers: any[]; // You can specify a more specific type if needed + ID: string + Name: string + Image: string + Command: string + Project: string + Service: string + Created: number + State: string + Status: string + Health: string + ExitCode: number + Publishers: any[] // You can specify a more specific type if needed } From 3c69436c42b659fee924749eff82c12017217515 Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Wed, 20 Sep 2023 11:28:13 +0530 Subject: [PATCH 10/11] Reverted the Keycloak Secreat and made changes in the init file for messages to be displayed --- docker-compose.yml | 2 +- tools/cli/src/commands/init.ts | 2 +- tools/cli/src/config/config.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index efedbe77c..02766fcd8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -328,7 +328,7 @@ services: - '8087:8087' environment: KEYCLOAK_CLIENT_ID: admin-api - KEYCLOAK_CLIENT_SECRET: 61fdeaf0-9654-4c12-b7ff-f7116c9e4fca + KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_SECRET} DIGILOCKER_HMAC_AUTHKEY: ${DIGILOCKER_HMAC_AUTHKEY} DIGILOCKER_AUTH_KEYNAME: x-digilocker-hmac PORT: 8087 diff --git a/tools/cli/src/commands/init.ts b/tools/cli/src/commands/init.ts index e32019ee5..06b2c6da0 100644 --- a/tools/cli/src/commands/init.ts +++ b/tools/cli/src/commands/init.ts @@ -104,7 +104,7 @@ export default { message: print.colors.reset('Enable authentication') + print.colors.yellow( - `(Enabling this will help you authenticate the enitity for crud operations based on the roles configurations defined in your schema)` + `(Enabling this will help you authenticate the enitity for crud operations based on the roles configuration defined in your schema)` ), name: 'enableRegistryAuthentication', initial: true, diff --git a/tools/cli/src/config/config.ts b/tools/cli/src/config/config.ts index d978e2dd1..53fbe2ac3 100644 --- a/tools/cli/src/config/config.ts +++ b/tools/cli/src/config/config.ts @@ -77,5 +77,5 @@ export let config: Config = { }, auxiliary_services: auxiliary_services, definationMangerTypes: definationsManagers, - maximumRetries: 30, + maximumRetries: 100, } From e1c86b0d734852ae9548810c9665c97c1c3e2f3a Mon Sep 17 00:00:00 2001 From: Sreejit-K Date: Wed, 20 Sep 2023 12:17:20 +0530 Subject: [PATCH 11/11] Added contibuter details --- tools/cli/package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/cli/package.json b/tools/cli/package.json index 9af2259f2..13ba669b4 100644 --- a/tools/cli/package.json +++ b/tools/cli/package.json @@ -15,6 +15,10 @@ { "name": "Tejash JL", "url": "https://github.com/tejash-jl" + }, + { + "name": "Sreejith K", + "url": "https://github.com/Sreejit-K" } ], "license": "MIT",