From 7c02e15961228bf0a260cebaef5f553a8a091162 Mon Sep 17 00:00:00 2001 From: Daniel Perez Date: Fri, 6 Aug 2021 15:46:28 +0000 Subject: [PATCH 01/12] ci: adding hpa --- .gitlab-ci.yml | 2 + NOTICE | 11 +++-- devops/azure/chart/helm-config.yaml | 2 + devops/azure/chart/templates/hpa.yaml | 42 +++++++++++++++++++ .../azure-seismic-store-service.yml | 2 + 5 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 devops/azure/chart/templates/hpa.yaml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 91f31b23..07ce8cf7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,8 @@ variables: PORT: 80 REPLICA: 1 UTEST_RUNTIME_IMAGE: seistore-svc-runtime + SDMS_MIN_REPLICAS: 1 + SDMS_MAX_REPLICAS: 5 #aws variables AWS_SERVICE: seismic-store diff --git a/NOTICE b/NOTICE index c7b1ebf3..238c7072 100644 --- a/NOTICE +++ b/NOTICE @@ -511,7 +511,7 @@ The following software have components provided under the terms of this license: - execa (from https://www.npmjs.com/package/execa) - express (from https://www.npmjs.com/package/express) - extend (from https://www.npmjs.com/package/extend) -- extsprintf (from https://github.com/davepacheco/node-extsprintf) +- extsprintf (from https://www.npmjs.com/package/extsprintf) - fast-deep-equal (from https://www.npmjs.com/package/fast-deep-equal) - fast-json-stable-stringify (from https://www.npmjs.com/package/fast-json-stable-stringify) - fast-safe-stringify (from https://www.npmjs.com/package/fast-safe-stringify) @@ -708,7 +708,7 @@ The following software have components provided under the terms of this license: - performance-now (from https://www.npmjs.com/package/performance-now) - priorityqueuejs (from https://www.npmjs.com/package/priorityqueuejs) - process (from https://www.npmjs.com/package/process) -- process-nextick-args (from https://github.com/calvinmetcalf/process-nextick-args) +- process-nextick-args (from https://www.npmjs.com/package/process-nextick-args) - promise.prototype.finally (from https://www.npmjs.com/package/promise.prototype.finally) - protobufjs (from https://www.npmjs.com/package/protobufjs) - proxy-addr (from https://www.npmjs.com/package/proxy-addr) @@ -815,7 +815,7 @@ The following software have components provided under the terms of this license: - universalify (from https://www.npmjs.com/package/universalify) - unpipe (from https://github.com/stream-utils/unpipe) - untildify (from https://www.npmjs.com/package/untildify) -- url (from https://github.com/defunctzombie/node-url#readme) +- url (from https://www.npmjs.com/package/url) - url-join (from https://www.npmjs.com/package/url-join) - urllib3 (from https://urllib3.readthedocs.io/) - util-deprecate (from https://github.com/TooTallNate/util-deprecate) @@ -827,7 +827,7 @@ The following software have components provided under the terms of this license: - uuid (from https://www.npmjs.com/package/uuid) - uuid (from https://www.npmjs.com/package/uuid) - vary (from https://www.npmjs.com/package/vary) -- verror (from https://github.com/davepacheco/node-verror) +- verror (from https://www.npmjs.com/package/verror) - which (from https://github.com/isaacs/node-which#readme) - which-module (from https://www.npmjs.com/package/which-module) - wide-align (from https://www.npmjs.com/package/wide-align) @@ -930,3 +930,6 @@ The following software have components provided under the terms of this license: - jmespath (from https://www.npmjs.com/package/jmespath) - json-schema (from http://github.com/kriszyp/json-schema) - querystring (from https://www.npmjs.com/package/querystring) +- sax (from https://www.npmjs.com/package/sax) + + diff --git a/devops/azure/chart/helm-config.yaml b/devops/azure/chart/helm-config.yaml index 6caba091..7f8cbf9c 100644 --- a/devops/azure/chart/helm-config.yaml +++ b/devops/azure/chart/helm-config.yaml @@ -2,6 +2,8 @@ global: replicaCount: #{REPLICA_COUNT}# namespace: osdu podidentity: osdu-identity + minReplicaCount: #{SDMS_MIN_REPLICAS}# + maxReplicaCount: #{SDMS_MAX_REPLICAS}# configEnv: cloudProvider: #{PROVIDER_NAME}# diff --git a/devops/azure/chart/templates/hpa.yaml b/devops/azure/chart/templates/hpa.yaml new file mode 100644 index 00000000..a3261666 --- /dev/null +++ b/devops/azure/chart/templates/hpa.yaml @@ -0,0 +1,42 @@ +apiVersion: autoscaling/v2beta2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ .Release.Name }} + namespace: osdu +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ .Release.Name }} + minReplicas: {{ .Values.global.minReplicaCount }} + maxReplicas: {{ .Values.global.maxReplicaCount }} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 + behavior: + scaleDown: + stabilizationWindowSeconds: 300 + # Either remove 20% of current pods or 2 pods (whichever is lower) every 15 seconds until the the HPA stabilizes + selectPolicy: Min + policies: + - type: Percent + value: 20 + periodSeconds: 15 + - type: Pods + value: 2 + periodSeconds: 15 + scaleUp: + stabilizationWindowSeconds: 0 + # Either add 100% of current pods or 4 pods (whichever is higher) every 1 second until the the HPA stabilizes + selectPolicy: Max + policies: + - type: Percent + value: 85 + periodSeconds: 1 + - type: Pods + value: 4 + periodSeconds: 1 \ No newline at end of file diff --git a/devops/osdu/cloud-providers/azure-seismic-store-service.yml b/devops/osdu/cloud-providers/azure-seismic-store-service.yml index 4220ab29..48d96668 100644 --- a/devops/osdu/cloud-providers/azure-seismic-store-service.yml +++ b/devops/osdu/cloud-providers/azure-seismic-store-service.yml @@ -39,6 +39,8 @@ azure_deploy: - sed -i 's/#{REDIS_HOST}#/'$REDIS_INSTANCE_ADDRESS'/' ${CHART_PATH}/values.yaml - sed -i 's/#{REDIS_PORT}#/'$REDIS_INSTANCE_PORT'/' ${CHART_PATH}/values.yaml - sed -i 's/#{REPLICA_COUNT}#/'$REPLICA'/' ${CHART_PATH}/values.yaml + - sed -i 's/#{SDMS_MIN_REPLICAS}#/'$SDMS_MIN_REPLICAS'/' ${CHART_PATH}/values.yaml + - sed -i 's/#{SDMS_MAX_REPLICAS}#/'$SDMS_MAX_REPLICAS'/' ${CHART_PATH}/values.yaml # Install helm chart - helm upgrade $SERVICE_NAME ${CHART_PATH} --install --dry-run --values $CHART_PATH/values.yaml - helm upgrade $SERVICE_NAME ${CHART_PATH} --install --values $CHART_PATH/values.yaml -- GitLab From 26a3f4b5ee53b710995bcdd1e34bd171256b9f3e Mon Sep 17 00:00:00 2001 From: Diego Molteni Date: Mon, 9 Aug 2021 06:42:26 +0000 Subject: [PATCH 02/12] refactor: reworked impersonation token --- NOTICE | 74 +++---- docs/api/openapi.osdu.yaml | 207 +++++++++--------- docs/api/openapi.yaml | 204 +++++++++--------- src/auth/auth.ts | 107 ++++++--- src/auth/providers/generic/auth.ts | 5 + src/services/dataset/handler.ts | 52 +++-- src/services/impersonation_token/handler.ts | 226 +++++--------------- src/services/impersonation_token/model.ts | 9 +- src/services/impersonation_token/optype.ts | 2 +- src/services/impersonation_token/parser.ts | 46 +--- src/services/impersonation_token/service.ts | 10 - src/services/imptoken/handler.ts | 6 +- src/services/utility/handler.ts | 30 ++- src/shared/utils.ts | 68 ++++-- tests/utest/auth/auth.ts | 16 +- 15 files changed, 512 insertions(+), 550 deletions(-) diff --git a/NOTICE b/NOTICE index 0d73de17..838a8a54 100644 --- a/NOTICE +++ b/NOTICE @@ -90,7 +90,7 @@ The following software have components provided under the terms of this license: - jmespath (from https://www.npmjs.com/package/jmespath) - jwtproxy (from https://www.npmjs.com/package/jwtproxy) - keycloak-admin (from https://www.npmjs.com/package/keycloak-admin) -- log4js (from https://github.com/nomiddlename/log4js-node) +- log4js (from https://www.npmjs.com/package/log4js) - long (from https://www.npmjs.com/package/long) - mime-db (from https://www.npmjs.com/package/mime-db) - mime-db (from https://www.npmjs.com/package/mime-db) @@ -100,7 +100,7 @@ The following software have components provided under the terms of this license: - python-dateutil (from https://dateutil.readthedocs.org) - rc (from https://www.npmjs.com/package/rc) - request (from https://www.npmjs.com/package/request) -- requests (from http://python-requests.org) +- requests (from https://requests.readthedocs.io) - s3transfer (from https://github.com/boto/s3transfer) - swagger-ui-dist (from https://www.npmjs.com/package/swagger-ui-dist) - teeny-request (from https://www.npmjs.com/package/teeny-request) @@ -121,11 +121,11 @@ BSD-2-Clause The following software have components provided under the terms of this license: - ajv (from https://www.npmjs.com/package/ajv) -- async-listener (from https://github.com/othiym23/async-listener#readme) +- async-listener (from https://www.npmjs.com/package/async-listener) - bcrypt-pbkdf (from https://www.npmjs.com/package/bcrypt-pbkdf) - cls-hooked (from https://www.npmjs.com/package/cls-hooked) - configstore (from https://www.npmjs.com/package/configstore) -- continuation-local-storage (from https://github.com/othiym23/node-continuation-local-storage#readme) +- continuation-local-storage (from https://www.npmjs.com/package/continuation-local-storage) - docutils (from http://docutils.sourceforge.net/) - dotenv (from https://www.npmjs.com/package/dotenv) - emitter-listener (from https://github.com/othiym23/emitter-listener) @@ -164,14 +164,14 @@ The following software have components provided under the terms of this license: - @protobufjs/path (from https://www.npmjs.com/package/@protobufjs/path) - @protobufjs/pool (from https://www.npmjs.com/package/@protobufjs/pool) - @protobufjs/utf8 (from https://www.npmjs.com/package/@protobufjs/utf8) -- async-listener (from https://github.com/othiym23/async-listener#readme) +- async-listener (from https://www.npmjs.com/package/async-listener) - aws-sdk (from https://www.npmjs.com/package/aws-sdk) - bcrypt-pbkdf (from https://www.npmjs.com/package/bcrypt-pbkdf) - buffer-equal-constant-time (from https://www.npmjs.com/package/buffer-equal-constant-time) - cls-hooked (from https://www.npmjs.com/package/cls-hooked) - cluster-key-slot (from https://www.npmjs.com/package/cluster-key-slot) - configstore (from https://www.npmjs.com/package/configstore) -- continuation-local-storage (from https://github.com/othiym23/node-continuation-local-storage#readme) +- continuation-local-storage (from https://www.npmjs.com/package/continuation-local-storage) - cryptography (from https://github.com/pyca/cryptography) - docutils (from http://docutils.sourceforge.net/) - google-gax (from https://www.npmjs.com/package/google-gax) @@ -280,7 +280,7 @@ The following software have components provided under the terms of this license: - inherits (from https://www.npmjs.com/package/inherits) - inherits (from https://www.npmjs.com/package/inherits) - ini (from https://www.npmjs.com/package/ini) -- isexe (from https://github.com/isaacs/isexe#readme) +- isexe (from https://www.npmjs.com/package/isexe) - json-stringify-safe (from https://github.com/isaacs/json-stringify-safe) - jwtproxy (from https://www.npmjs.com/package/jwtproxy) - lockfile (from https://www.npmjs.com/package/lockfile) @@ -297,14 +297,14 @@ The following software have components provided under the terms of this license: - npm-packlist (from https://www.npmjs.com/package/npm-packlist) - npmlog (from https://www.npmjs.com/package/npmlog) - once (from https://github.com/isaacs/once#readme) -- osenv (from https://github.com/npm/osenv#readme) +- osenv (from https://www.npmjs.com/package/osenv) - pseudomap (from https://www.npmjs.com/package/pseudomap) -- request-promise (from https://github.com/request/request-promise) +- request-promise (from https://www.npmjs.com/package/request-promise) - request-promise-core (from https://www.npmjs.com/package/request-promise-core) - require-main-filename (from https://www.npmjs.com/package/require-main-filename) - rimraf (from https://www.npmjs.com/package/rimraf) -- sax (from https://github.com/isaacs/sax-js#readme) -- sax (from https://github.com/isaacs/sax-js#readme) +- sax (from https://www.npmjs.com/package/sax) +- sax (from https://www.npmjs.com/package/sax) - semver (from https://www.npmjs.com/package/semver) - semver (from https://www.npmjs.com/package/semver) - semver (from https://www.npmjs.com/package/semver) @@ -395,9 +395,9 @@ The following software have components provided under the terms of this license: - PyJWT (from http://github.com/jpadilla/pyjwt) - abbrev (from https://www.npmjs.com/package/abbrev) - abort-controller (from https://www.npmjs.com/package/abort-controller) -- accepts (from https://github.com/jshttp/accepts) +- accepts (from https://www.npmjs.com/package/accepts) - adal (from https://github.com/AzureAD/azure-activedirectory-library-for-python) -- agent-base (from https://github.com/TooTallNate/node-agent-base#readme) +- agent-base (from https://www.npmjs.com/package/agent-base) - ajv (from https://www.npmjs.com/package/ajv) - ansi-regex (from https://www.npmjs.com/package/ansi-regex) - ansi-regex (from https://www.npmjs.com/package/ansi-regex) @@ -422,11 +422,11 @@ The following software have components provided under the terms of this license: - balanced-match (from https://www.npmjs.com/package/balanced-match) - base64-js (from https://www.npmjs.com/package/base64-js) - bcrypt-pbkdf (from https://www.npmjs.com/package/bcrypt-pbkdf) -- bignumber.js (from https://github.com/MikeMcl/bignumber.js#readme) +- bignumber.js (from https://www.npmjs.com/package/bignumber.js) - bluebird (from https://www.npmjs.com/package/bluebird) - body-parser (from https://www.npmjs.com/package/body-parser) - botocore (from https://github.com/boto/botocore) -- brace-expansion (from https://github.com/juliangruber/brace-expansion) +- brace-expansion (from https://www.npmjs.com/package/brace-expansion) - browser-request (from http://github.com/iriscouch/browser-request) - buffer (from https://www.npmjs.com/package/buffer) - buffer-from (from https://www.npmjs.com/package/buffer-from) @@ -458,7 +458,7 @@ The following software have components provided under the terms of this license: - console-control-strings (from https://www.npmjs.com/package/console-control-strings) - console-log-level (from https://www.npmjs.com/package/console-log-level) - content-disposition (from https://www.npmjs.com/package/content-disposition) -- content-type (from https://github.com/jshttp/content-type) +- content-type (from https://www.npmjs.com/package/content-type) - cookie (from https://www.npmjs.com/package/cookie) - cookie-signature (from https://github.com/visionmedia/node-cookie-signature) - copyfiles (from https://www.npmjs.com/package/copyfiles) @@ -491,13 +491,13 @@ The following software have components provided under the terms of this license: - dot-prop (from https://www.npmjs.com/package/dot-prop) - dot-prop (from https://www.npmjs.com/package/dot-prop) - duplexify (from https://www.npmjs.com/package/duplexify) -- ecc-jsbn (from https://github.com/quartzjer/ecc-jsbn) +- ecc-jsbn (from https://www.npmjs.com/package/ecc-jsbn) - ee-first (from https://github.com/jonathanong/ee-first) - emoji-regex (from https://www.npmjs.com/package/emoji-regex) - enabled (from https://www.npmjs.com/package/enabled) - encodeurl (from https://www.npmjs.com/package/encodeurl) -- end-of-stream (from https://github.com/mafintosh/end-of-stream) -- ent (from https://github.com/substack/node-ent) +- end-of-stream (from https://www.npmjs.com/package/end-of-stream) +- ent (from https://www.npmjs.com/package/ent) - errs (from https://www.npmjs.com/package/errs) - es-abstract (from https://www.npmjs.com/package/es-abstract) - es-abstract (from https://www.npmjs.com/package/es-abstract) @@ -554,7 +554,7 @@ The following software have components provided under the terms of this license: - gtoken (from https://www.npmjs.com/package/gtoken) - har-schema (from https://www.npmjs.com/package/har-schema) - har-validator (from https://www.npmjs.com/package/har-validator) -- has (from https://github.com/tarruda/has) +- has (from https://www.npmjs.com/package/has) - has-flag (from https://www.npmjs.com/package/has-flag) - has-symbols (from https://www.npmjs.com/package/has-symbols) - has-unicode (from https://www.npmjs.com/package/has-unicode) @@ -562,7 +562,7 @@ The following software have components provided under the terms of this license: - http-errors (from https://www.npmjs.com/package/http-errors) - http-proxy-agent (from https://www.npmjs.com/package/http-proxy-agent) - http-signature (from https://www.npmjs.com/package/http-signature) -- https-proxy-agent (from https://github.com/TooTallNate/node-https-proxy-agent#readme) +- https-proxy-agent (from https://www.npmjs.com/package/https-proxy-agent) - iconv-lite (from https://www.npmjs.com/package/iconv-lite) - ignore-walk (from https://www.npmjs.com/package/ignore-walk) - imurmurhash (from https://www.npmjs.com/package/imurmurhash) @@ -571,7 +571,7 @@ The following software have components provided under the terms of this license: - inherits (from https://www.npmjs.com/package/inherits) - ini (from https://www.npmjs.com/package/ini) - ioredis (from https://www.npmjs.com/package/ioredis) -- ipaddr.js (from https://github.com/whitequark/ipaddr.js/issues) +- ipaddr.js (from https://www.npmjs.com/package/ipaddr.js) - is (from https://github.com/enricomarino/is) - is-arrayish (from https://www.npmjs.com/package/is-arrayish) - is-buffer (from https://www.npmjs.com/package/is-buffer) @@ -590,9 +590,9 @@ The following software have components provided under the terms of this license: - is-stream-ended (from https://www.npmjs.com/package/is-stream-ended) - is-symbol (from https://www.npmjs.com/package/is-symbol) - is-typedarray (from https://github.com/hughsk/is-typedarray) -- isarray (from https://github.com/juliangruber/isarray) -- isarray (from https://github.com/juliangruber/isarray) -- isexe (from https://github.com/isaacs/isexe#readme) +- isarray (from https://www.npmjs.com/package/isarray) +- isarray (from https://www.npmjs.com/package/isarray) +- isexe (from https://www.npmjs.com/package/isexe) - isstream (from https://github.com/rvagg/isstream) - jmespath (from https://www.npmjs.com/package/jmespath) - jmespath (from https://github.com/jmespath/jmespath.py) @@ -655,14 +655,14 @@ The following software have components provided under the terms of this license: - module-details-from-path (from https://www.npmjs.com/package/module-details-from-path) - moment (from https://www.npmjs.com/package/moment) - moment-timezone (from https://www.npmjs.com/package/moment-timezone) -- ms (from https://github.com/guille/ms.js) -- ms (from https://github.com/guille/ms.js) -- ms (from https://github.com/guille/ms.js) +- ms (from https://www.npmjs.com/package/ms) +- ms (from https://www.npmjs.com/package/ms) +- ms (from https://www.npmjs.com/package/ms) - msal (from https://www.npmjs.com/package/msal) - nan (from https://www.npmjs.com/package/nan) - needle (from https://www.npmjs.com/package/needle) - needle (from https://www.npmjs.com/package/needle) -- negotiator (from https://github.com/jshttp/negotiator) +- negotiator (from https://www.npmjs.com/package/negotiator) - nice-try (from https://www.npmjs.com/package/nice-try) - node-abort-controller (from https://www.npmjs.com/package/node-abort-controller) - node-fetch (from https://www.npmjs.com/package/node-fetch) @@ -690,7 +690,7 @@ The following software have components provided under the terms of this license: - os-homedir (from https://github.com/sindresorhus/os-homedir) - os-name (from https://www.npmjs.com/package/os-name) - os-tmpdir (from https://github.com/sindresorhus/os-tmpdir) -- osenv (from https://github.com/npm/osenv#readme) +- osenv (from https://www.npmjs.com/package/osenv) - p-defer (from https://www.npmjs.com/package/p-defer) - p-finally (from https://www.npmjs.com/package/p-finally) - p-limit (from https://www.npmjs.com/package/p-limit) @@ -726,14 +726,14 @@ The following software have components provided under the terms of this license: - readable-stream (from https://www.npmjs.com/package/readable-stream) - readable-stream (from https://www.npmjs.com/package/readable-stream) - readable-stream (from https://www.npmjs.com/package/readable-stream) -- redis (from https://github.com/NodeRedis/node_redis) -- redis-commands (from https://github.com/NodeRedis/redis-commonds) +- redis (from https://www.npmjs.com/package/redis) +- redis-commands (from https://www.npmjs.com/package/redis-commands) - redis-errors (from https://www.npmjs.com/package/redis-errors) - redis-parser (from https://www.npmjs.com/package/redis-parser) - redlock (from https://www.npmjs.com/package/redlock) - redlock-async (from https://www.npmjs.com/package/redlock-async) - replace-in-file (from https://www.npmjs.com/package/replace-in-file) -- request-promise (from https://github.com/request/request-promise) +- request-promise (from https://www.npmjs.com/package/request-promise) - request-promise-core (from https://www.npmjs.com/package/request-promise-core) - require-directory (from https://github.com/troygoode/node-require-directory/) - require-in-the-middle (from https://www.npmjs.com/package/require-in-the-middle) @@ -745,8 +745,8 @@ The following software have components provided under the terms of this license: - safe-buffer (from https://www.npmjs.com/package/safe-buffer) - safe-buffer (from https://www.npmjs.com/package/safe-buffer) - safer-buffer (from https://www.npmjs.com/package/safer-buffer) -- sax (from https://github.com/isaacs/sax-js#readme) -- sax (from https://github.com/isaacs/sax-js#readme) +- sax (from https://www.npmjs.com/package/sax) +- sax (from https://www.npmjs.com/package/sax) - semaphore (from https://www.npmjs.com/package/semaphore) - semver (from https://www.npmjs.com/package/semver) - semver (from https://www.npmjs.com/package/semver) @@ -832,7 +832,7 @@ The following software have components provided under the terms of this license: - which-module (from https://www.npmjs.com/package/which-module) - wide-align (from https://www.npmjs.com/package/wide-align) - windows-release (from https://www.npmjs.com/package/windows-release) -- winston (from https://github.com/winstonjs/winston#readme) +- winston (from https://www.npmjs.com/package/winston) - winston-transport (from https://www.npmjs.com/package/winston-transport) - wrap-ansi (from https://www.npmjs.com/package/wrap-ansi) - wrap-ansi (from https://www.npmjs.com/package/wrap-ansi) @@ -901,7 +901,7 @@ W3C ======================================================================== The following software have components provided under the terms of this license: -- sax (from https://github.com/isaacs/sax-js#readme) +- sax (from https://www.npmjs.com/package/sax) ======================================================================== public-domain diff --git a/docs/api/openapi.osdu.yaml b/docs/api/openapi.osdu.yaml index 319055e7..c63642d3 100644 --- a/docs/api/openapi.osdu.yaml +++ b/docs/api/openapi.osdu.yaml @@ -83,6 +83,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Legal tag of the dataset." in: header name: ltag @@ -142,6 +148,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -188,6 +200,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -237,6 +255,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -300,6 +324,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -358,6 +388,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -404,6 +440,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -446,6 +488,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -496,6 +544,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -548,6 +602,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "The tenant project name." in: path name: tenantid @@ -579,6 +639,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -623,6 +689,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -666,6 +738,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant." in: path name: tenantid @@ -709,6 +787,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store path, sd://tenant/sub-project/path." in: query name: sdpath @@ -758,6 +842,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store source dataset path." in: query name: sdpath_from @@ -803,6 +893,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store path in the format sd://tenant/sub-project." in: query name: sdpath @@ -842,7 +938,7 @@ paths: name: request body required: true schema: - $ref: "#/definitions/ImpersonationToken" + $ref: "#/definitions/ImpTokenRequest" responses: 200: description: "Generated a impersonation credentials token successfully." @@ -961,9 +1057,9 @@ paths: type: string required: true default: "" - - description: "The name of the tenant/data-partition." - in: query - name: tenant-name + - description: "The impersonation token context." + in: header + name: impersonation-token-context type: string required: true default: "" @@ -980,72 +1076,6 @@ paths: description: "Forbidden" 404: description: "Not found" - delete: - summary: "Revoke the impersonation token and/or a list of impersonation token signatures." - description: "" - operationId: impersonation-token-revoke - tags: - - Impersonation Token - parameters: - - description: "The impersonation token to revoke (required if the signatures body field is not specified)." - in: header - name: impersonation-token - type: string - required: false - default: "" - - description: "The name of the tenant/data-partition." - in: query - name: tenant-name - type: string - required: true - default: "" - - description: "List of impersonation token signatures." - in: query - name: signatures - required: false - type: array - items: - type: string - default: "" - collectionFormat: multi - responses: - 200: - description: "The impersonation token and/or the requested signatures have been successfully revoked." - 400: - description: "Bad request" - 401: - description: "Unauthorized" - 403: - description: "Forbidden" - 404: - description: "Not found" - /api/v3/impersonation-token/signatures: - get: - summary: "Retrieve the list of active impersonation token signatures." - description: "" - operationId: impersonation-token-signature - tags: - - Impersonation Token - parameters: - - description: "The name of the tenant/data-partition" - in: query - name: tenant-name - type: string - required: true - default: "" - responses: - 200: - description: "The list of signatures with their metadata." - schema: - $ref: "#/definitions/ImpersonationTokenSignatureResponse" - 400: - description: "Bad request." - 401: - description: "Unauthorized." - 403: - description: "Forbidden." - 404: - description: "Not found." /subproject/tenant/{tenantid}/subproject/{subprojectid}: post: @@ -1851,7 +1881,7 @@ definitions: # OK ImpersonationToken: - required: ["impersonation_token", "token_type", "expires_in"] + required: ["impersonation_token", "token_type", "expires_in", "context"] properties: impersonation_token: type: string @@ -1862,10 +1892,14 @@ definitions: expires_in: type: number description: Token expiration time. + context: + type: string + description: the Impersonation token context. example: impersonation_token: "ya29.fgdgsdngevrjbinb0exdnberoibnerbnerber-fdsfwefwe_cece.rfd43f3" token_type: "Bearer" expires_in: 3600 + context: "xf420cvrv303fm4vksvdkvnejvrjbinb0exdnberonswc2mvmalksdvdeakvwrmk" # OK Resource: @@ -1894,37 +1928,6 @@ definitions: { "resource": "sd://tnx01/spx02", "readonly": false } ] metadata: { "jobId": 1234 } - - # OK - ImpersonationTokenSignature: - required: ["created_by", "created_date", "resources", "signature"] - properties: - created_by: - type: string - description: The trusted app id . - created_date: - type: string - description: The create date and time. - resources: - type: array - items: - $ref: "#/definitions/Resource" - signature: - type: string - description: the impersonation token signature. - metadata: - type: object - description: the custom metadata associated. - - # OK - ImpersonationTokenSignatureResponse: - required: ["signatures"] - properties: - signatures: - type: array - items: - $ref: "#/definitions/ImpersonationTokenSignature" - # OK ImpTokenRequest: required: ["token", "resources", "refresh-url"] diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index c306ca23..69f6cbc2 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -93,6 +93,12 @@ paths: type: string required: false default: "Slb-Private-USA-EHC" + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -148,6 +154,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -198,6 +210,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -241,6 +259,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -301,6 +325,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -359,6 +389,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -405,6 +441,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -451,6 +493,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -504,6 +552,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -558,6 +612,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "The tenant project name" in: path name: tenantid @@ -587,6 +647,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -631,6 +697,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -674,6 +746,12 @@ paths: tags: - Dataset parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Name of the tenant" in: path name: tenantid @@ -717,6 +795,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store path, sd://tenant/sub-project/path" in: query name: sdpath @@ -763,6 +847,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store source dataset path" in: query name: sdpath_from @@ -806,6 +896,12 @@ paths: tags: - Utility parameters: + - description: "The impersonation token context (required only with impersonation token credentials)" + in: header + name: impersonation-token-context + type: string + required: false + default: "" - description: "Seismic store path in the format sd://tenant/sub-project" in: query name: sdpath @@ -960,9 +1056,9 @@ paths: type: string required: true default: "" - - description: "The name of the tenant/data-partition." - in: query - name: tenant-name + - description: "The impersonation token context." + in: header + name: impersonation-token-context type: string required: true default: "" @@ -979,72 +1075,6 @@ paths: description: "Forbidden" 404: description: "Not found" - delete: - summary: "Revoke the impersonation token and/or a list of impersonation token signatures." - description: "" - operationId: impersonation-token-revoke - tags: - - Impersonation Token - parameters: - - description: "The impersonation token to revoke (required if the signatures body field is not specified)." - in: header - name: impersonation-token - type: string - required: false - default: "" - - description: "The name of the tenant/data-partition." - in: query - name: tenant-name - type: string - required: true - default: "" - - description: "List of impersonation token signatures." - in: query - name: signatures - required: false - type: array - items: - type: string - default: "" - collectionFormat: multi - responses: - 200: - description: "The impersonation token and/or the requested signatures have been successfully revoked." - 400: - description: "Bad request" - 401: - description: "Unauthorized" - 403: - description: "Forbidden" - 404: - description: "Not found" - /api/v3/impersonation-token/signatures: - get: - summary: "Retrieve the list of active impersonation token signatures." - description: "" - operationId: impersonation-token-signature - tags: - - Impersonation Token - parameters: - - description: "The name of the tenant/data-partition" - in: query - name: tenant-name - type: string - required: true - default: "" - responses: - 200: - description: "The list of signatures with their metadata." - schema: - $ref: "#/definitions/ImpersonationTokenSignatureResponse" - 400: - description: "Bad request." - 401: - description: "Unauthorized." - 403: - description: "Forbidden." - 404: - description: "Not found." /api/v3/subproject/tenant/{tenantid}/subproject/{subprojectid}: post: @@ -1858,7 +1888,7 @@ definitions: # OK ImpersonationToken: - required: ["impersonation_token", "token_type", "expires_in"] + required: ["impersonation_token", "token_type", "expires_in", "context"] properties: impersonation_token: type: string @@ -1869,10 +1899,14 @@ definitions: expires_in: type: number description: Token expiration time. + context: + type: string + description: the Impersonation token context. example: impersonation_token: "ya29.fgdgsdngevrjbinb0exdnberoibnerbnerber-fdsfwefwe_cece.rfd43f3" token_type: "Bearer" expires_in: 3600 + context: "xf420cvrv303fm4vksvdkvnejvrjbinb0exdnberonswc2mvmalksdvdeakvwrmk" # OK Resource: @@ -1902,36 +1936,6 @@ definitions: ] metadata: { "jobId": 1234 } - # OK - ImpersonationTokenSignature: - required: ["created_by", "created_date", "resources", "signature"] - properties: - created_by: - type: string - description: The trusted app id . - created_date: - type: string - description: The create date and time. - resources: - type: array - items: - $ref: "#/definitions/Resource" - signature: - type: string - description: the impersonation token signature. - metadata: - type: object - description: the custom metadata associated. - - # OK - ImpersonationTokenSignatureResponse: - required: ["signatures"] - properties: - signatures: - type: array - items: - $ref: "#/definitions/ImpersonationTokenSignature" - # OK ImpTokenRequest: required: ["token", "resources", "refresh-url"] diff --git a/src/auth/auth.ts b/src/auth/auth.ts index f4b545ce..707d2248 100644 --- a/src/auth/auth.ts +++ b/src/auth/auth.ts @@ -22,7 +22,7 @@ import { TenantModel } from '../services/tenant'; import { Cache, Error, Utils } from '../shared'; import { AuthGroups } from './groups'; import { createHash } from 'crypto'; -import { ImpersonationTokenModel } from '../services/impersonation_token/model'; +import { ImpersonationTokenContextModel, ImpersonationTokenModel } from '../services/impersonation_token/model'; import { ImpersonationTokenHandler } from '../services/impersonation_token/handler'; import { ITenantModel } from '../services/tenant/model'; @@ -33,7 +33,7 @@ export class AuthProviderFactoryBuilder { public static register(providerLabel: string) { return (target: any) => { - if(AuthProviderFactoryBuilder.providers[providerLabel]) { + if (AuthProviderFactoryBuilder.providers[providerLabel]) { AuthProviderFactoryBuilder.providers[providerLabel].push(target); } else { AuthProviderFactoryBuilder.providers[providerLabel] = [target]; @@ -47,7 +47,7 @@ export class AuthProviderFactoryBuilder { throw (Error.make(Error.Status.UNKNOWN, `Unrecognized auth provider: ${providerLabel}`)); } - for(const provider of AuthProviderFactoryBuilder.providers[providerLabel]) { + for (const provider of AuthProviderFactoryBuilder.providers[providerLabel]) { if (provider.prototype instanceof referenceAbstraction) { return new provider(args); } @@ -67,12 +67,14 @@ export interface IAuthProvider { generateAuthCredential(): Promise; convertToImpersonationTokenModel(credential: any): ImpersonationTokenModel; getClientID(): string; + getClientSecret(): string; } export abstract class AbstractAuthProvider implements IAuthProvider { public abstract generateAuthCredential(): Promise; public abstract convertToImpersonationTokenModel(credential: any): ImpersonationTokenModel; public abstract getClientID(): string; + public abstract getClientSecret(): string; } export class AuthProviderFactory extends AuthProviderFactoryBuilder { @@ -105,7 +107,7 @@ export class Auth { createHash('sha1').update(authToken).digest('base64') + ',' + authGroupEmails.sort().join(',')); let isAuthorized = await this._cache.get(cacheKey); - if (isAuthorized === undefined) { // key not exist in cache -> canll entitlement + if (isAuthorized === undefined) { // key not exist in cache -> call entitlement isAuthorized = await AuthGroups.isMemberOfAtleastOneGroup(authToken, authGroupEmails, esd, appkey); await this._cache.set(cacheKey, isAuthorized, this._cacheItemTTL); } @@ -121,13 +123,15 @@ export class Auth { public static async isWriteAuthorized( authToken: string, authGroupsName: string[], tenant: ITenantModel, subprojectName: string, - appkey: string, mustThrow: boolean = true): Promise { + appkey: string, impersonationTokenContext: string, + mustThrow: boolean = true): Promise { if (Auth.isObsoleteImpersonationToken(authToken)) { return Auth.isImpersonationTokenWriteAuthorized(authToken, tenant.name, subprojectName, mustThrow); } else if (Auth.isNewImpersonationToken(authToken)) { - return await Auth.isNewImpersonationTokenWriteAuthorized(authToken, tenant, subprojectName, mustThrow); + return await Auth.isNewImpersonationTokenWriteAuthorized( + impersonationTokenContext, tenant, subprojectName, mustThrow); } else { return await Auth.isUserAuthorized(authToken, authGroupsName, tenant.esd, appkey, mustThrow); } @@ -136,13 +140,15 @@ export class Auth { public static async isReadAuthorized( authToken: string, authGroupsName: string[], tenant: ITenantModel, subprojectName: string, - appkey: string, mustThrow: boolean = true): Promise { + appkey: string, impersonationTokenContext: string, + mustThrow: boolean = true): Promise { if (Auth.isObsoleteImpersonationToken(authToken)) { return Auth.isImpersonationTokenReadAuthorized(authToken, tenant.name, subprojectName, mustThrow); } else if (Auth.isNewImpersonationToken(authToken)) { - return Auth.isNewImpersonationTokenReadAuthorized(authToken, tenant, subprojectName, mustThrow); + return Auth.isNewImpersonationTokenReadAuthorized( + impersonationTokenContext, tenant, subprojectName, mustThrow); } else { return await Auth.isUserAuthorized(authToken, authGroupsName, tenant.esd, appkey, mustThrow); } @@ -220,49 +226,92 @@ export class Auth { } private static async isNewImpersonationTokenWriteAuthorized( - token: string, tenant: ITenantModel, subprojectName: string, mustThrow = true): Promise { + tokenContext: string, tenant: ITenantModel, + subprojectName: string, mustThrow = true): Promise { - const metadata = await ImpersonationTokenHandler.getImpersonationTokenData(tenant, token); - if(!metadata) { // signature not found - throw (Error.make(Error.Status.PERMISSION_DENIED, + if (!tokenContext) { + if (!mustThrow) { return false; } + throw (Error.make(Error.Status.BAD_REQUEST, + 'Unauthorized Access to ' + 'sd://' + tenant.name + '/' + subprojectName + + 'The request impersonation-token-context header has not been specified.')); + } + + if (tokenContext.split('.').length !== 2) { + if (!mustThrow) { return false; } + throw (Error.make(Error.Status.BAD_REQUEST, 'Unauthorized Access to ' + 'sd://' + tenant.name + '/' + subprojectName + - '. The impersonation token signature has not been found. Please generate a new impersonation token and try again')); + 'The request impersonation-token-context header value is not in the right form.')); } - const resource = metadata.resources.find((el) => el.resource === (tenant.name + '/' + subprojectName)); + + const authClientSecret = AuthProviderFactory.build( + Config.SERVICE_AUTH_PROVIDER).getClientSecret(); + + // decrypt the impersonation token context + const context = JSON.parse(Utils.decrypt( + tokenContext.split('.')[0], + tokenContext.split('.')[1], + authClientSecret)) as ImpersonationTokenContextModel; + + const resource = context.resources.find((el) => el.resource === (tenant.name + '/' + subprojectName)); // resource not found - if (!resource && mustThrow) { + if (!resource) { + if (!mustThrow) { return false; } throw (Error.make(Error.Status.PERMISSION_DENIED, - 'The imptoken has not been authorized for the subproject resource ' + + 'The impersonation token has not been authorized for the subproject resource ' + 'sd://' + tenant.name + '/' + subprojectName)); } - if (!resource) { return false; } - if (resource.readonly && mustThrow) { + if (resource.readonly) { + if (!mustThrow) { return false; } throw (Error.make(Error.Status.PERMISSION_DENIED, - 'The imptoken has not been write authorized for the subproject resource ' + + 'The impersonation token has not been write authorized for the subproject resource ' + 'sd://' + tenant.name + '/' + subprojectName)); } - return !resource.readonly; + + return true; + } private static async isNewImpersonationTokenReadAuthorized( - token: string, tenant: ITenantModel , subprojectName: string, mustThrow: boolean = true): Promise { + tokenContext: string, tenant: ITenantModel, + subprojectName: string, mustThrow: boolean = true): Promise { - const metadata = await ImpersonationTokenHandler.getImpersonationTokenData(tenant, token); - if(!metadata) { // signature not found - throw (Error.make(Error.Status.PERMISSION_DENIED, + if (!tokenContext) { + if (!mustThrow) { return false; } + throw (Error.make(Error.Status.BAD_REQUEST, 'Unauthorized Access to ' + 'sd://' + tenant.name + '/' + subprojectName + - '. The impersonation token signature has not been found. Please generate a new impersonation token and try again')); + 'The request impersonation-token-context header has not been specified.')); } - const resource = metadata.resources.find((el) => el.resource === (tenant.name + '/' + subprojectName)); - if (!resource && mustThrow) { + if (tokenContext.split('.').length !== 2) { + if (!mustThrow) { return false; } + throw (Error.make(Error.Status.BAD_REQUEST, + 'Unauthorized Access to ' + 'sd://' + tenant.name + '/' + subprojectName + + 'The request impersonation-token-context header value is not in the right form.')); + } + + const authClientSecret = AuthProviderFactory.build( + Config.SERVICE_AUTH_PROVIDER).getClientSecret(); + + // decrypt the impersonation token context + const context = JSON.parse(Utils.decrypt( + tokenContext.split('.')[0], + tokenContext.split('.')[1], + authClientSecret)) as ImpersonationTokenContextModel; + + const resource = context.resources.find((el) => el.resource === (tenant.name + '/' + subprojectName)); + + // resource not found + if (!resource) { + if (!mustThrow) { return false; } throw (Error.make(Error.Status.PERMISSION_DENIED, - 'The imptoken has not been authorized for the subproject resource ' + + 'The impersonation token has not been authorized for the subproject resource ' + 'sd://' + tenant.name + '/' + subprojectName)); } - return resource !== undefined; + + return true; + } } diff --git a/src/auth/providers/generic/auth.ts b/src/auth/providers/generic/auth.ts index 548bd235..ae189198 100644 --- a/src/auth/providers/generic/auth.ts +++ b/src/auth/providers/generic/auth.ts @@ -36,4 +36,9 @@ export class GenericAuthProvider extends AbstractAuthProvider { 'The required feature is not supported, the credential auth provider has not been found.')); } + public getClientSecret(): string { + throw (Error.make(Error.Status.NOT_IMPLEMENTED, + 'The required feature is not supported, the credential auth provider has not been found.')); + } + } \ No newline at end of file diff --git a/src/services/dataset/handler.ts b/src/services/dataset/handler.ts index b21681b4..a3f3e998 100644 --- a/src/services/dataset/handler.ts +++ b/src/services/dataset/handler.ts @@ -154,7 +154,8 @@ export class DatasetHandler { FeatureFlags.isEnabled(Feature.AUTHORIZATION) ? Auth.isWriteAuthorized(req.headers.authorization, subproject.acls.admins, - tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY]) : undefined, + tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string) : undefined, FeatureFlags.isEnabled(Feature.LEGALTAG) ? dataset.ltag ? Auth.isLegalTagValid( req.headers.authorization, dataset.ltag, @@ -293,7 +294,8 @@ export class DatasetHandler { 'Access policy for the subproject is neither uniform nor dataset')); } await Auth.isReadAuthorized(req.headers.authorization, authGroups, - tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // return the seismicmetadata (if exist) @@ -325,7 +327,8 @@ export class DatasetHandler { // Check authorizations await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } @@ -385,7 +388,8 @@ export class DatasetHandler { } await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + authGroups, tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // check if valid url @@ -439,11 +443,13 @@ export class DatasetHandler { if (wid.startsWith('W')) { await Auth.isWriteAuthorized(req.headers.authorization, subproject.acls.admins, - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } } @@ -529,7 +535,8 @@ export class DatasetHandler { } await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + authGroups, tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // patch datasetOUT with datasetIN @@ -755,7 +762,9 @@ export class DatasetHandler { } await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY]); + authGroups, tenant, datasetIN.subproject, + req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { @@ -770,7 +779,8 @@ export class DatasetHandler { } await Auth.isReadAuthorized(req.headers.authorization, authGroups, - tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } } @@ -849,7 +859,9 @@ export class DatasetHandler { } await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY]); + authGroups, tenant, dataset.subproject, + req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); // unlock await Locker.unlock(lockKey); @@ -869,7 +881,8 @@ export class DatasetHandler { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, datasets[0].subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, datasets[0].subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // Check if the required datasets exist @@ -898,7 +911,8 @@ export class DatasetHandler { if (FeatureFlags.isEnabled(Feature.AUTHORIZATION)) { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, datasets[0].subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, datasets[0].subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // Check if the required datasets exist @@ -940,7 +954,8 @@ export class DatasetHandler { // Check authorizations await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // list the folder content @@ -1020,7 +1035,9 @@ export class DatasetHandler { } await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, datasetIN.subproject, req[Config.DE_FORWARD_APPKEY]); + authGroups, tenant, datasetIN.subproject, + req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } await DatasetDAO.update(journalClient, datasetOUT, datasetOUTKey); @@ -1062,7 +1079,9 @@ export class DatasetHandler { } res.write = await Auth.isWriteAuthorized(req.headers.authorization, - authGroups, tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], false); + authGroups, tenant, dataset.subproject, + req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false); // Check write authorization @@ -1077,7 +1096,8 @@ export class DatasetHandler { } res.read = await Auth.isReadAuthorized(req.headers.authorization, authGroups, - tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], false); + tenant, dataset.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false); } else { res.write = true; diff --git a/src/services/impersonation_token/handler.ts b/src/services/impersonation_token/handler.ts index c233a4f1..db487488 100644 --- a/src/services/impersonation_token/handler.ts +++ b/src/services/impersonation_token/handler.ts @@ -18,31 +18,30 @@ import { Request as expRequest, Response as expResponse } from 'express'; import { Auth, AuthProviderFactory } from '../../auth'; import { Config, JournalFactoryTenantClient } from '../../cloud'; import { SeistoreFactory } from '../../cloud/seistore'; -import { Cache, Error, Feature, FeatureFlags, Response, Utils } from '../../shared'; +import { Error, Feature, FeatureFlags, Response, Utils } from '../../shared'; import { SubProjectDAO } from '../subproject'; import { TenantDAO } from '../tenant'; -import { ImpersonationTokenModel, ImpersonationTokenDataModel, ImpersonationTokenResourceModel } from './model'; +import { ImpersonationTokenModel, ImpersonationTokenContextModel } from './model'; import { ImpersonationTokenOps } from './optype'; import { ImpersonationTokenParser } from './parser'; -import { createHash } from 'crypto'; -import { ITenantModel } from '../tenant/model'; export class ImpersonationTokenHandler { - private static _cache = new Cache('imptoken_sign'); - private static _cacheTTL = 300; // 5 minutes - // handler for the [ /impersonation-token ] endpoints public static async handler(req: expRequest, res: expResponse, op: ImpersonationTokenOps) { try{ + + // the impersonation token endpoints are not available with impersonation tokens + if (Auth.isImpersonationToken(req.headers.authorization)) { + throw (Error.make(Error.Status.PERMISSION_DENIED, + 'Impersonation token endpoints not available' + + ' with an impersonation token as Auth credentials.')); + } + if (op === ImpersonationTokenOps.Generate) { Response.writeOK(res, await this.generate(req)); } else if (op === ImpersonationTokenOps.Refresh) { Response.writeOK(res, await this.refresh(req)); - } else if (op === ImpersonationTokenOps.DeleteSignatures) { - Response.writeOK(res, await this.deleteSignatures(req)); - } else if (op === ImpersonationTokenOps.GetSignatures) { - Response.writeOK(res, await this.getSignatures(req)); } else { throw (Error.make(Error.Status.UNKNOWN, 'Internal Server Error')); } } catch (error) { Response.writeError(res, error); } @@ -57,6 +56,8 @@ export class ImpersonationTokenHandler { const tenantName = requestBody.resources[0].resource.split('/')[0]; const tenant = await TenantDAO.get(tenantName); const subject = Utils.getSubFromPayload(req.headers.authorization); + const user = Utils.getSubIDFromPayload(req.headers['user-token'] as string) || + Utils.getSubFromPayload(req.headers['user-token'] as string) || undefined; // check if the caller is a trusted application (subject, email(obsolete), emailV2(obsolete)) try { @@ -93,7 +94,8 @@ export class ImpersonationTokenHandler { requestBody.userToken : 'Bearer ' + requestBody.userToken, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], false)); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false)); } else { authorizationCheckList.push( Auth.isWriteAuthorized( @@ -101,7 +103,8 @@ export class ImpersonationTokenHandler { requestBody.userToken : 'Bearer ' + requestBody.userToken, subproject.acls.admins, - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], false)); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false)); } } const results = await Promise.all(authorizationCheckList); @@ -119,22 +122,18 @@ export class ImpersonationTokenHandler { await AuthProviderFactory.build( Config.SERVICE_AUTH_PROVIDER).generateAuthCredential()); - // Save the impersonation token signature with meta-information in the catalogue - const data = { - created_by: subject, - created_date: new Date().toString(), + // Build and sign the impersonation token context + const context = { + user, metadata: requestBody.metadata, resources: requestBody.resources, - signature: this.computeSignature(impersonationToken.impersonation_token) - } as ImpersonationTokenDataModel; - const key = journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, data.signature], - }); - await journalClient.save({ data, key }); + } as ImpersonationTokenContextModel; + + const authClientSecret = AuthProviderFactory.build( + Config.SERVICE_AUTH_PROVIDER).getClientSecret(); - // Save them in cache too (for fast retrieval) - await this._cache.set(data.signature, data.resources, this._cacheTTL); + const encryptedContext = Utils.encrypt(JSON.stringify(context), authClientSecret); + impersonationToken.context = encryptedContext.encryptedText + '.' + encryptedContext.encryptedTextIV; // Done return impersonationToken; @@ -147,161 +146,48 @@ export class ImpersonationTokenHandler { // parse the request input and retrieve the token const requestParams = ImpersonationTokenParser.refresh(req); - const tenant = await TenantDAO.get(requestParams.tenantName); - // the impersonation token must be valid and active - if(!(await this.hasActiveSignature(tenant, requestParams.token))) { - throw (Error.make(Error.Status.BAD_REQUEST, - 'The impersonation token is not valid or not active (retired)')); - } + const authClientSecret = AuthProviderFactory.build( + Config.SERVICE_AUTH_PROVIDER).getClientSecret(); - // get the impersonation token data - const data = await this.getImpersonationTokenData(tenant, requestParams.token); + // decrypt the impersonation token context + const context = JSON.parse(Utils.decrypt( + requestParams.tokenContext.split('.')[0], + requestParams.tokenContext.split('.')[1], + authClientSecret)) as ImpersonationTokenContextModel; - // generate a new impersonation token credential token (the auth credential) + const tenantName = context.resources[0].resource.split('/')[0]; + const tenant = await TenantDAO.get(tenantName); + const subject = Utils.getSubFromPayload(req.headers.authorization); + + // check if the caller is a trusted application (subject, email(obsolete), emailV2(obsolete)) + try { + await Auth.isAppAuthorized(tenant, subject); + } catch (error) { + const appEmail = await SeistoreFactory.build( + Config.CLOUDPROVIDER).getEmailFromTokenPayload(req.headers.authorization, false); + try { + await Auth.isAppAuthorized(tenant, appEmail); + } catch (error) { + const appEmailV2 = Utils.checkSauthV1EmailDomainName(appEmail); + if (appEmailV2 !== appEmail) { + await Auth.isAppAuthorized(tenant, appEmailV2); + } else { + throw(error); + } + } + } + + // generate the impersonation token credential token (the auth credential) const impersonationToken = AuthProviderFactory.build( Config.SERVICE_AUTH_PROVIDER).convertToImpersonationTokenModel( await AuthProviderFactory.build( Config.SERVICE_AUTH_PROVIDER).generateAuthCredential()); - // the metadata will now have a new signature, update and save in catalogue and cache - data.signature = this.computeSignature(impersonationToken.impersonation_token); - const journalClient = JournalFactoryTenantClient.get(tenant); - const key = journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, data.signature], - }); - await journalClient.save({ data, key }); - await this._cache.set(data.signature, data.resources, this._cacheTTL); - - // remove the old entry from catalogue and cache - const retiredSignature = this.computeSignature(requestParams.token); - await journalClient.delete(journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, retiredSignature], - })); - await this._cache.del(retiredSignature); + impersonationToken.context = requestParams.tokenContext; - // Done return impersonationToken; } - // delete impersonation token signatures - private static async deleteSignatures(req: expRequest): Promise { - - if (!FeatureFlags.isEnabled(Feature.IMPTOKEN)) return {} as ImpersonationTokenModel; - - // parse the request input and retrieve the token - const requestParams = ImpersonationTokenParser.deleteSignatures(req); - const tenant = await TenantDAO.get(requestParams.tenantName); - - // the impersonation token if present must be valid and active - if(requestParams.token) { - if(!(await this.hasActiveSignature(tenant, requestParams.token))) { - throw (Error.make(Error.Status.BAD_REQUEST, - 'The impersonation token is not valid or not active (retired)')); - } - } - - // compute the signatures list = input signatures + input token signature - let signatures: string[] = [] - if(requestParams.token) { - signatures = signatures.concat(this.computeSignature(requestParams.token)); - } - if (requestParams.signatures) { - signatures = signatures.concat(requestParams.signatures); - } - - // delete signatures from catalogue - const deleteDataOps = []; - const journalClient = JournalFactoryTenantClient.get(tenant); - signatures.forEach(signature => { - deleteDataOps.push(journalClient.delete(journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, signature], - }))); - }); - await Promise.all(deleteDataOps); - - // delete signature from cache - const deleteCacheOps = []; - signatures.forEach(signature => { - deleteCacheOps.push(this._cache.del(signature)); - }); - await Promise.all(deleteCacheOps); - - // Done - - } - - // get impersonation token signatures - private static async getSignatures(req: expRequest): Promise { - - if (!FeatureFlags.isEnabled(Feature.IMPTOKEN)) return {} as ImpersonationTokenModel; - - // parse the request input and retrieve the token - const tenantName = ImpersonationTokenParser.getSignatures(req); - const tenant = await TenantDAO.get(tenantName); - - const journalClient = JournalFactoryTenantClient.get(tenant); - const query = journalClient.createQuery( - Config.SEISMIC_STORE_NS + '-' + tenant.name, Config.IMPERSONATION_TOKEN_SIGNATURE_KIND) - .filter('created_by', Utils.getSubFromPayload(req.headers.authorization)); - const [results] = await journalClient.runQuery(query); - return results; - - } - - // generate the impersonation token signatures - private static computeSignature(impersonationToken: string): string { - return createHash('sha256').update(impersonationToken, 'utf8').digest('hex'); - } - - // retrieve the impersonation token data from the catalogue - public static async getImpersonationTokenData( - tenant: ITenantModel, token: string): Promise { - - token = token.startsWith('Bearer') ? token.substr('Bearer '.length) : token - const signature = this.computeSignature(token); - - // get the entity from the catalogue - const journalClient = JournalFactoryTenantClient.get(tenant); - const key = journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, signature], - }); - const [entity] = await journalClient.get(key); - - if(entity) { - await this._cache.set(signature, entity.resources, this._cacheTTL); - return entity; - } else { - return undefined; - } - - } - - // check if the impersonation token has a valid and active signature - public static async hasActiveSignature( - tenant: ITenantModel, token: string): Promise { - - token = token.startsWith('Bearer') ? token.substr('Bearer '.length) : token - const signature = this.computeSignature(token); - - const res = await this._cache.get(signature); - if (res !== undefined && res) { return true }; - - // get the entity from the catalogue - const journalClient = JournalFactoryTenantClient.get(tenant); - const key = journalClient.createKey({ - namespace: Config.SEISMIC_STORE_NS + '-' + tenant.name, - path: [Config.IMPERSONATION_TOKEN_SIGNATURE_KIND, signature], - }); - const [entity] = await journalClient.get(key); - - return entity !== undefined; - - } - } diff --git a/src/services/impersonation_token/model.ts b/src/services/impersonation_token/model.ts index 40962130..42d7e739 100644 --- a/src/services/impersonation_token/model.ts +++ b/src/services/impersonation_token/model.ts @@ -19,6 +19,7 @@ export interface ImpersonationTokenModel { impersonation_token: string; expires_in: number; token_type: string; + context: string; } // Impersonation Token Resource @@ -34,11 +35,9 @@ export interface ImpersonationTokenRequestBodyModel { metadata: object; } -// Impersonation Token Signature Model -export interface ImpersonationTokenDataModel { - signature: string; +// Impersonation Token Context Model +export interface ImpersonationTokenContextModel { resources: ImpersonationTokenResourceModel[]; metadata: object; - created_by: string; - created_date: string; + user: string; } diff --git a/src/services/impersonation_token/optype.ts b/src/services/impersonation_token/optype.ts index 7fb5eee5..15d98f2a 100644 --- a/src/services/impersonation_token/optype.ts +++ b/src/services/impersonation_token/optype.ts @@ -14,4 +14,4 @@ // limitations under the License. // ============================================================================ -export enum ImpersonationTokenOps { Generate, Refresh, DeleteSignatures, GetSignatures } +export enum ImpersonationTokenOps { Generate, Refresh } diff --git a/src/services/impersonation_token/parser.ts b/src/services/impersonation_token/parser.ts index 3c2c3551..1a051035 100644 --- a/src/services/impersonation_token/parser.ts +++ b/src/services/impersonation_token/parser.ts @@ -81,56 +81,24 @@ export class ImpersonationTokenParser { } - public static refresh(req: expRequest): {token: string, tenantName: string} { + public static refresh(req: expRequest): {token: string, tokenContext: string} { const token = req.headers['impersonation-token'] as string; if(!token) { throw (Error.make(Error.Status.BAD_REQUEST, 'The request impersonation-token header has not been specified.')); } - const tenantName = req.query['tenant-name']; - if(!tenantName) { + const tokenContext = req.headers['impersonation-token-context'] as string; + if(!tokenContext) { throw (Error.make(Error.Status.BAD_REQUEST, - 'The tenant-name query paramter has not been specified.')); + 'The request impersonation-token-context header has not been specified.')); } - - return {token, tenantName} - } - - public static getSignatures(req: expRequest): string { - - const tenantName = req.query['tenant-name']; - if(!tenantName) { - throw (Error.make(Error.Status.BAD_REQUEST, - 'The tenant-name query paramter has not been specified.')); - } - return tenantName; - } - - public static deleteSignatures(req: expRequest): {token: string, tenantName: string, signatures: string[]} { - - const tenantName = req.query['tenant-name']; - if(!tenantName) { + if(tokenContext.split('.').length !== 2) { throw (Error.make(Error.Status.BAD_REQUEST, - 'The tenant-name query paramter has not been specified.')); - } - - const token = req.headers['impersonation-token'] as string; - const signatures = req.query['signatures']; - - if(!signatures && !token) { - throw (Error.make(Error.Status.BAD_REQUEST, - 'The request must present the impersonation-token header or a non-empty of signatures.')); - } - - if(signatures) { - if(signatures.length === 0 && !token) { - throw (Error.make(Error.Status.BAD_REQUEST, - 'The request must present the impersonation-token header or a non-empty list of signatures.')); - } + 'The request impersonation-token-context header value is not in the right form.')); } - return {token, tenantName, signatures} + return {token, tokenContext} } } diff --git a/src/services/impersonation_token/service.ts b/src/services/impersonation_token/service.ts index eba0b639..8e8a482c 100644 --- a/src/services/impersonation_token/service.ts +++ b/src/services/impersonation_token/service.ts @@ -30,14 +30,4 @@ router.put('/', async (req: expRequest, res: expResponse) => { await ImpersonationTokenHandler.handler(req, res, ImpersonationTokenOps.Refresh); }); -// delete impersonation token signatures -router.delete('/', async (req: expRequest, res: expResponse) => { - await ImpersonationTokenHandler.handler(req, res, ImpersonationTokenOps.DeleteSignatures); -}); - -// list impersonation token signatures -router.get('/signatures', async (req: expRequest, res: expResponse) => { - await ImpersonationTokenHandler.handler(req, res, ImpersonationTokenOps.GetSignatures); -}); - export { router as ImpersonationTokenRouter }; diff --git a/src/services/imptoken/handler.ts b/src/services/imptoken/handler.ts index a146fb3b..9d922221 100644 --- a/src/services/imptoken/handler.ts +++ b/src/services/imptoken/handler.ts @@ -110,12 +110,14 @@ export class ImpTokenHandler { checkAuthorizations.push( Auth.isReadAuthorized(tokenBody.userToken, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, subprojectName, req[Config.DE_FORWARD_APPKEY], false)); + tenant, subprojectName, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false)); } else { checkAuthorizations.push( Auth.isWriteAuthorized(tokenBody.userToken, subproject.acls.admins, - tenant, subprojectName, req[Config.DE_FORWARD_APPKEY], false)); + tenant, subprojectName, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string, false)); } } const results = await Promise.all(checkAuthorizations); diff --git a/src/services/utility/handler.ts b/src/services/utility/handler.ts index 07c4a145..32cc4462 100644 --- a/src/services/utility/handler.ts +++ b/src/services/utility/handler.ts @@ -70,11 +70,13 @@ export class UtilityHandler { if (readOnly) { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { await Auth.isWriteAuthorized(req.headers.authorization, subproject.acls.admins, - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } } else { const dataset = subproject.enforce_key ? @@ -85,21 +87,25 @@ export class UtilityHandler { if (dataset.acls) { await Auth.isReadAuthorized(req.headers.authorization, dataset.acls.viewers.concat(dataset.acls.admins), - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } } else { if (dataset.acls) { await Auth.isReadAuthorized(req.headers.authorization, dataset.acls.admins, - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.admins, - tenant, subproject.name, req[Config.DE_FORWARD_APPKEY]); + tenant, subproject.name, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } } objectPrefix = dataset.gcsurl.split('/')[1]; @@ -192,7 +198,8 @@ export class UtilityHandler { // Check if user is authorized await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, sdPath.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, sdPath.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } if (pagination) { @@ -262,17 +269,20 @@ export class UtilityHandler { if (datasetFrom.acls) { await Auth.isReadAuthorized(req.headers.authorization, datasetFrom.acls.viewers.concat(datasetFrom.acls.admins), - tenant, sdPathFrom.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, sdPathFrom.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } else { await Auth.isReadAuthorized(req.headers.authorization, subproject.acls.viewers.concat(subproject.acls.admins), - tenant, sdPathFrom.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, sdPathFrom.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } // check if has write access on destination dataset and read access on the source subproject await Auth.isWriteAuthorized(req.headers.authorization, subproject.acls.admins, - tenant, sdPathTo.subproject, req[Config.DE_FORWARD_APPKEY]); + tenant, sdPathTo.subproject, req[Config.DE_FORWARD_APPKEY], + req.headers['impersonation-token-context'] as string); } diff --git a/src/shared/utils.ts b/src/shared/utils.ts index 8c1dde11..7e51a457 100644 --- a/src/shared/utils.ts +++ b/src/shared/utils.ts @@ -1,5 +1,5 @@ // ============================================================================ -// Copyright 2017-2019, Schlumberger +// Copyright 2017-2021, Schlumberger // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,13 +14,14 @@ // limitations under the License. // ============================================================================ -import { Config } from '../cloud'; +import * as crypto from 'crypto' +import { Config } from '../cloud'; export class Utils { - public static getPropertyFromTokenPayload(base64jwtpayload: string, property: string): string { - const payload = this.getPayloadFromStringToken(base64jwtpayload); + public static getPropertyFromTokenPayload(base64JwtPayload: string, property: string): string { + const payload = this.getPayloadFromStringToken(base64JwtPayload); return property in payload ? payload[property] : undefined; } @@ -34,20 +35,24 @@ export class Utils { email.replace('slbservice.com@slb.com', 'slbservice.com@delfiserviceaccount.com') : email; } - public static getIssFromPayload(base64jwtpayload: string): string { - return this.getPayloadFromStringToken(base64jwtpayload).iss; + public static getIssFromPayload(base64JwtPayload: string): string { + return this.getPayloadFromStringToken(base64JwtPayload).iss; } - public static getExpTimeFromPayload(base64jwtpayload: string): number { - return Number(this.getPayloadFromStringToken(base64jwtpayload).exp); + public static getExpTimeFromPayload(base64JwtPayload: string): number { + return Number(this.getPayloadFromStringToken(base64JwtPayload).exp); } - public static getAudienceFromPayload(base64jwtpayload: string): string { - return this.getPayloadFromStringToken(base64jwtpayload).aud + public static getAudienceFromPayload(base64JwtPayload: string): string { + return this.getPayloadFromStringToken(base64JwtPayload).aud } - public static getSubFromPayload(base64jwtpayload: string): string { - return this.getPayloadFromStringToken(base64jwtpayload).sub; + public static getSubFromPayload(base64JwtPayload: string): string { + return this.getPayloadFromStringToken(base64JwtPayload).sub; + } + + public static getSubIDFromPayload(base64JwtPayload: string): string { + return this.getPayloadFromStringToken(base64JwtPayload).subid; } public static makeID(len: number): string { @@ -59,23 +64,44 @@ export class Utils { return id; } - public static getPayloadFromStringToken(base64jwtpayload: string): any { + public static getPayloadFromStringToken(base64JwtPayload: string): any { - if (base64jwtpayload === undefined) { return undefined; } + if (base64JwtPayload === undefined) { return undefined; } - base64jwtpayload = base64jwtpayload.replace(' ', ''); - base64jwtpayload = base64jwtpayload.replace('Bearer', ''); - const base64jwtpayloadtokens = base64jwtpayload.split('.'); + base64JwtPayload = base64JwtPayload.replace(' ', ''); + base64JwtPayload = base64JwtPayload.replace('Bearer', ''); + const base64JwtPayloadTokens = base64JwtPayload.split('.'); - base64jwtpayload = base64jwtpayloadtokens.length === 3 ? base64jwtpayloadtokens[1] : base64jwtpayload; + base64JwtPayload = base64JwtPayloadTokens.length === 3 ? base64JwtPayloadTokens[1] : base64JwtPayload; - const missingPadding = base64jwtpayload.length % 4; + const missingPadding = base64JwtPayload.length % 4; if (missingPadding !== 0) { - base64jwtpayload += '='.repeat(4 - missingPadding); + base64JwtPayload += '='.repeat(4 - missingPadding); } - return JSON.parse(Buffer.from(base64jwtpayload, 'base64').toString()); + return JSON.parse(Buffer.from(base64JwtPayload, 'base64').toString()); + + } + + public static encrypt(text: string, key: string) { + const iv = crypto.randomBytes(16); + const keySign = crypto.createHash('sha256').update(String(key)).digest('base64').substr(0, 32); + const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(keySign), iv); + let encrypted = cipher.update(text); + encrypted = Buffer.concat([encrypted, cipher.final()]); + return { + encryptedText: encrypted.toString('hex'), + encryptedTextIV: iv.toString('hex') + } + } + public static decrypt(encryptedText: string, encryptedTextIV: string, key: string) { + const keySign = crypto.createHash('sha256').update(String(key)).digest('base64').substr(0, 32); + const ivNew = Buffer.from(encryptedTextIV, 'hex'); + const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(keySign), ivNew); + let decrypted = decipher.update(Buffer.from(encryptedText, 'hex')); + decrypted = Buffer.concat([decrypted, decipher.final()]); + return decrypted.toString(); } } diff --git a/tests/utest/auth/auth.ts b/tests/utest/auth/auth.ts index 0fb6502a..420ab341 100644 --- a/tests/utest/auth/auth.ts +++ b/tests/utest/auth/auth.ts @@ -77,33 +77,33 @@ export class TestAuth { this.sandbox.stub(DESEntitlement, 'getUserGroups').resolves([{ name: 'none' }] as never); this.sandbox.stub(Auth, 'isNewImpersonationToken').returns(false); try { - await Auth.isWriteAuthorized(this.userToken, [], tenant, 's', 'appkey'); + await Auth.isWriteAuthorized(this.userToken, [], tenant, 's', 'appkey', undefined); } catch (e) { Tx.check403(e.error.code, done); } }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns( { resources: [{ resource: 't/s', readonly: false }] } as ImpTokenBodyModel); - Tx.checkTrue(await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey'), done); + Tx.checkTrue(await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined), done); }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns({ resources: [] } as ImpTokenBodyModel); - Tx.checkFalse(await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey', false), done); + Tx.checkFalse(await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined, false), done); }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns( { resources: [{ resource: 't/s', readonly: true }] } as ImpTokenBodyModel); try { - await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey'); + await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined); } catch (e) { Tx.check403(e.error.code, done); } }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns({ resources: [] } as ImpTokenBodyModel); try { - await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey'); + await Auth.isWriteAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined); } catch (e) { Tx.check403(e.error.code, done); } }); @@ -121,20 +121,20 @@ export class TestAuth { this.sandbox.stub(DESEntitlement, 'getUserGroups').resolves([{ name: 'none' }] as never); this.sandbox.stub(Auth, 'isNewImpersonationToken').returns(false); try { - await Auth.isReadAuthorized(this.userToken, [], tenant, 's', 'appkey'); + await Auth.isReadAuthorized(this.userToken, [], tenant, 's', 'appkey', undefined); } catch (e) { Tx.check403(e.error.code, done); } }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns( { resources: [{ resource: 't/s', readonly: false }] } as ImpTokenBodyModel); - Tx.checkTrue(await Auth.isReadAuthorized(this.impToken, [], tenant, 's', 'appkey'), done); + Tx.checkTrue(await Auth.isReadAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined), done); }); Tx.test(async (done: any) => { this.sandbox.stub(ImpTokenDAO, 'getImpTokenBody').returns({ resources: [] } as ImpTokenBodyModel); try { - await Auth.isReadAuthorized(this.impToken, [], tenant, 's', 'appkey'); + await Auth.isReadAuthorized(this.impToken, [], tenant, 's', 'appkey', undefined); } catch (e) { Tx.check403(e.error.code, done); } }); -- GitLab From 1c9f814c3c1445b31abee2aa08a09b73cbd45efa Mon Sep 17 00:00:00 2001 From: Diego Molteni Date: Mon, 9 Aug 2021 14:54:08 +0000 Subject: [PATCH 03/12] fix: fixed patch acls with access mode = "dataset" --- src/services/dataset/parser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/dataset/parser.ts b/src/services/dataset/parser.ts index f4edbfc6..2c7a1afd 100644 --- a/src/services/dataset/parser.ts +++ b/src/services/dataset/parser.ts @@ -154,6 +154,7 @@ export class DatasetParser { const seismicmeta = req.body.seismicmeta; Params.checkObject(seismicmeta, 'seismicmeta', false); + dataset.acls = req.body && 'acls' in req.body ? req.body.acls : undefined; DatasetParser.validateAcls(dataset); return [dataset, seismicmeta, newName, closeid]; -- GitLab From 263e2ce0736d5897b250637ed2ec5c58cd5111ab Mon Sep 17 00:00:00 2001 From: "Mikhail Piatliou (EPAM)" Date: Mon, 9 Aug 2021 19:56:09 +0000 Subject: [PATCH 04/12] Switch legal from Cloud Run to GKE endpoint [GONRG-2787] --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07ce8cf7..07893056 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -36,7 +36,7 @@ variables: OSDU_GCP_APPLICATION: seismic-store OSDU_GCP_ENTITLEMENT_BASE_URL_PATH: /entitlements/v2 OSDU_GCP_DATA_PARTITION_REST_HEADER_KEY: data-partition-id - OSDU_GCP_DES_SERVICE_HOST_COMPLIANCE: https://os-legal-attcrcktoa-uc.a.run.app/api + OSDU_GCP_DES_SERVICE_HOST_COMPLIANCE: https://community.osdu-gcp.go3-nrg.projects.epam.com/api OSDU_GCP_DES_SERVICE_HOST_STORAGE: https://os-storage-attcrcktoa-uc.a.run.app/api OSDU_GCP_ENV_VARS: CLOUDPROVIDER=${OSDU_GCP_CLOUD_PROVIDER},DES_SERVICE_HOST_PARTITION=${OSDU_GCP_PARTITION_API},ENTITLEMENT_BASE_URL_PATH=${OSDU_GCP_ENTITLEMENT_BASE_URL_PATH},DATA_PARTITION_REST_HEADER_KEY=${OSDU_GCP_DATA_PARTITION_REST_HEADER_KEY},DES_SERVICE_HOST_STORAGE=${OSDU_GCP_DES_SERVICE_HOST_STORAGE},DES_SERVICE_HOST_COMPLIANCE=${OSDU_GCP_DES_SERVICE_HOST_COMPLIANCE},SEISTORE_DES_TARGET_AUDIENCE=${GOOGLE_AUDIENCE},SERVICE_CLOUD_PROJECT=${OSDU_GCP_PROJECT},APP_ENVIRONMENT_IDENTIFIER=${TENANT},IMP_SERVICE_ACCOUNT_SIGNER=${OSDU_GCP_IMP_SERVICE_ACCOUNT_SIGNER},DES_SERVICE_HOST_ENTITLEMENT=${OSDU_GCP_ENTITLEMENTS_V2_BASE_URL},SEISTORE_DES_APPKEY=${OSDU_GCP_SEISTORE_DES_APPKEY},DES_REDIS_INSTANCE_ADDRESS=${OSDU_GCP_DES_REDIS_INSTANCE_ADDRESS},DES_REDIS_INSTANCE_PORT=${OSDU_GCP_DES_REDIS_INSTANCE_PORT},LOCKSMAP_REDIS_INSTANCE_ADDRESS=${OSDU_GCP_LOCKSMAP_REDIS_INSTANCE_ADDRESS} --vpc-connector=$OSDU_GCP_VPC_CONNECTOR -- GitLab From 5e0cb58971dd892ff364f812cf0617731bdc307d Mon Sep 17 00:00:00 2001 From: Varunkumar Manohar Date: Tue, 10 Aug 2021 03:33:58 +0000 Subject: [PATCH 05/12] refactor!: Set the subproject and dataset creator using the subid/sub value from the payload jwt --- NOTICE | 4 +--- src/services/dataset/parser.ts | 10 +++++----- src/services/subproject/dao.ts | 5 ----- src/services/subproject/handler.ts | 14 ++++++++------ src/shared/utils.ts | 8 ++++---- 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/NOTICE b/NOTICE index 238c7072..d3a29b82 100644 --- a/NOTICE +++ b/NOTICE @@ -930,6 +930,4 @@ The following software have components provided under the terms of this license: - jmespath (from https://www.npmjs.com/package/jmespath) - json-schema (from http://github.com/kriszyp/json-schema) - querystring (from https://www.npmjs.com/package/querystring) -- sax (from https://www.npmjs.com/package/sax) - - +- sax (from https://www.npmjs.com/package/sax) \ No newline at end of file diff --git a/src/services/dataset/parser.ts b/src/services/dataset/parser.ts index f4edbfc6..8eddebf6 100644 --- a/src/services/dataset/parser.ts +++ b/src/services/dataset/parser.ts @@ -16,9 +16,7 @@ import { Request as expRequest } from 'express'; import { DatasetModel } from '.'; -import { Config } from '../../cloud'; -import { SeistoreFactory } from '../../cloud/seistore'; -import { Error, Params } from '../../shared'; +import { Error, Params, Utils } from '../../shared'; export class DatasetParser { @@ -47,8 +45,10 @@ export class DatasetParser { const dataset = this.createDatasetModelFromRequest(req); dataset.ltag = (req.headers.ltag) as string; dataset.type = req.body ? req.body.type : undefined; - dataset.created_by = await SeistoreFactory.build( - Config.CLOUDPROVIDER).getEmailFromTokenPayload(req.headers.authorization, true); + dataset.created_by = Utils.getSubIDFromPayload(req.headers.authorization) || + Utils.getSubFromPayload(req.headers.authorization) || + undefined; + dataset.created_date = dataset.last_modified_date = new Date().toString(); dataset.gtags = req.body ? req.body.gtags : undefined; diff --git a/src/services/subproject/dao.ts b/src/services/subproject/dao.ts index 57c58062..064d6fae 100644 --- a/src/services/subproject/dao.ts +++ b/src/services/subproject/dao.ts @@ -129,7 +129,6 @@ export class SubProjectDAO { // check if a subproject exists public static async exist(journalClient: IJournal, tenantName: string, subprojectName: string): Promise { - const res = await this._cache.get(this.getCacheKey(tenantName, subprojectName)); if (res !== undefined && res) { return true; }; @@ -140,10 +139,6 @@ export class SubProjectDAO { const [entity] = await journalClient.get(entityKey); - if (entity) { - await this._cache.set(this.getCacheKey(entity.tenant, entity.name), entity); - } - return entity !== undefined; } diff --git a/src/services/subproject/handler.ts b/src/services/subproject/handler.ts index 02c1fe9b..dd2bb0e7 100644 --- a/src/services/subproject/handler.ts +++ b/src/services/subproject/handler.ts @@ -20,7 +20,7 @@ import { SubProjectModel } from '.'; import { Auth, AuthGroups } from '../../auth'; import { Config, JournalFactoryTenantClient, LoggerFactory, StorageFactory } from '../../cloud'; import { SeistoreFactory } from '../../cloud/seistore'; -import { Error, Feature, FeatureFlags, Response } from '../../shared'; +import { Error, Feature, FeatureFlags, Response, Utils } from '../../shared'; import { DatasetDAO, PaginationModel } from '../dataset'; import { TenantGroups, TenantModel } from '../tenant'; import { TenantDAO } from '../tenant/dao'; @@ -92,8 +92,6 @@ export class SubProjectHandler { const userEmail = await SeistoreFactory.build( Config.CLOUDPROVIDER).getEmailFromTokenPayload(req.headers.authorization, true); - subproject.admin = subproject.admin || userEmail; - // enforce the datasets schema by key for newly create subproject. // this will mainly affect google for which the initial implementation // of the journal was query-based (lack in performance) @@ -153,18 +151,22 @@ export class SubProjectHandler { subproject.gcs_bucket, subproject.storage_location, subproject.storage_class); + const subprojectCreatorEmail = subproject.admin || userEmail; + + subproject.admin = Utils.getSubIDFromPayload(req.headers.authorization) || + Utils.getSubFromPayload(req.headers.authorization) || undefined; // Register the subproject await SubProjectDAO.register(journalClient, subproject); if (FeatureFlags.isEnabled(Feature.AUTHORIZATION)) { // if admin is not the requestor, assign the admin and rm the requestor, has to be a sequential op - if (subproject.admin !== userEmail) { + if (subprojectCreatorEmail !== userEmail) { - await AuthGroups.addUserToGroup(userToken, adminGroup, subproject.admin, + await AuthGroups.addUserToGroup(userToken, adminGroup, subprojectCreatorEmail, tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true); - await AuthGroups.addUserToGroup(userToken, viewerGroup, subproject.admin, + await AuthGroups.addUserToGroup(userToken, viewerGroup, subprojectCreatorEmail, tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true); } diff --git a/src/shared/utils.ts b/src/shared/utils.ts index 7e51a457..707d08b5 100644 --- a/src/shared/utils.ts +++ b/src/shared/utils.ts @@ -14,10 +14,10 @@ // limitations under the License. // ============================================================================ -import * as crypto from 'crypto' - +import * as crypto from 'crypto'; import { Config } from '../cloud'; + export class Utils { public static getPropertyFromTokenPayload(base64JwtPayload: string, property: string): string { @@ -44,7 +44,7 @@ export class Utils { } public static getAudienceFromPayload(base64JwtPayload: string): string { - return this.getPayloadFromStringToken(base64JwtPayload).aud + return this.getPayloadFromStringToken(base64JwtPayload).aud; } public static getSubFromPayload(base64JwtPayload: string): string { @@ -92,7 +92,7 @@ export class Utils { return { encryptedText: encrypted.toString('hex'), encryptedTextIV: iv.toString('hex') - } + }; } public static decrypt(encryptedText: string, encryptedTextIV: string, key: string) { -- GitLab From 3ffd2e94a386f6c0c9dc149cd3e39dd7f9e99be8 Mon Sep 17 00:00:00 2001 From: Varunkumar Manohar Date: Wed, 4 Aug 2021 23:52:23 -0500 Subject: [PATCH 06/12] Update handler.ts --- src/services/subproject/handler.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/services/subproject/handler.ts b/src/services/subproject/handler.ts index dd2bb0e7..ea47dfc9 100644 --- a/src/services/subproject/handler.ts +++ b/src/services/subproject/handler.ts @@ -130,12 +130,14 @@ export class SubProjectHandler { if (FeatureFlags.isEnabled(Feature.AUTHORIZATION)) { // provision new groups - await AuthGroups.createGroup(userToken, adminGroupName, - 'seismic dms tenant ' + tenant.name + ' subproject ' + subproject.name + ' admin group', - tenant.esd, req[Config.DE_FORWARD_APPKEY]); - await AuthGroups.createGroup(userToken, viewerGroupName, - 'seismic dms tenant ' + tenant.name + ' subproject ' + subproject.name + ' editor group', - tenant.esd, req[Config.DE_FORWARD_APPKEY]); + await Promise.all([ + AuthGroups.createGroup(userToken, adminGroupName, + 'seismic dms tenant ' + tenant.name + ' subproject ' + subproject.name + ' admin group', + tenant.esd, req[Config.DE_FORWARD_APPKEY]), + AuthGroups.createGroup(userToken, viewerGroupName, + 'seismic dms tenant ' + tenant.name + ' subproject ' + subproject.name + ' editor group', + tenant.esd, req[Config.DE_FORWARD_APPKEY])] + ); } subproject.gcs_bucket = await this.getBucketName(tenant); @@ -163,11 +165,12 @@ export class SubProjectHandler { // if admin is not the requestor, assign the admin and rm the requestor, has to be a sequential op if (subprojectCreatorEmail !== userEmail) { - await AuthGroups.addUserToGroup(userToken, adminGroup, subprojectCreatorEmail, - tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true); - - await AuthGroups.addUserToGroup(userToken, viewerGroup, subprojectCreatorEmail, - tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true); + await Promise.all([ + AuthGroups.addUserToGroup(userToken, adminGroup, subprojectCreatorEmail, + tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true), + AuthGroups.addUserToGroup(userToken, viewerGroup, subprojectCreatorEmail, + tenant.esd, req[Config.DE_FORWARD_APPKEY], 'OWNER', true) + ]); } } -- GitLab From 5c7d22e89b73f892f9173d1f0f5bef9aca28818f Mon Sep 17 00:00:00 2001 From: Varunkumar Manohar Date: Tue, 3 Aug 2021 16:55:14 +0000 Subject: [PATCH 07/12] Update service.yaml --- devops/azure/chart/templates/service.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/devops/azure/chart/templates/service.yaml b/devops/azure/chart/templates/service.yaml index 54ca4be4..37056676 100644 --- a/devops/azure/chart/templates/service.yaml +++ b/devops/azure/chart/templates/service.yaml @@ -12,5 +12,6 @@ spec: - protocol: TCP port: 80 targetPort: 80 + name: http selector: - app: {{ .Release.Name }} \ No newline at end of file + app: {{ .Release.Name }} -- GitLab From 72555f8ddbd653f16301bdfbccd0c559f490dab0 Mon Sep 17 00:00:00 2001 From: Varunkumar Manohar Date: Fri, 30 Jul 2021 03:18:07 +0000 Subject: [PATCH 08/12] Update openapi.yaml --- docs/api/openapi.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 69f6cbc2..3421c16b 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -26,13 +26,13 @@ info: description: "Seismic Data Management APIs to store and manage seismic datasets ." host: "#{gcp.endpoints.service.name}#" -basePath: "/" +basePath: "/seistore-svc" x-google-endpoints: - name: "#{gcp.endpoints.service.name}#" allowCors: True -x-google-allow: all +x-google-allow: configured consumes: - application/json -- GitLab From 2c3937d5843ad8538f1a280e19f5e7ec12a815c4 Mon Sep 17 00:00:00 2001 From: Daniel Perez Date: Wed, 11 Aug 2021 14:13:15 +0000 Subject: [PATCH 09/12] ci: fix scan for secrets --- .gitlab-ci.yml | 3 + .../docker/detect_secrets/.secrets.baseline | 6737 +---------------- devops/docker/detect_secrets/README.md | 8 + .../osdu/scanners/scan-for-secrets-node.yml | 6 +- devops/scripts/azure_jwt_client.py | 3 +- src/cloud/providers/azure/credentials.ts | 1 + src/cloud/providers/azure/keyvault.ts | 1 + src/cloud/providers/google/secrets.ts | 1 + src/cloud/providers/ibm/credentials.ts | 1 + src/cloud/shared/queue.ts | 1 + tests/utest/cloud/azure/keyvault.ts | 1 + 11 files changed, 32 insertions(+), 6731 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07893056..e40f00eb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -54,6 +54,9 @@ include: # lint - local: "/devops/osdu/scanners/lint-node.yml" + + # scan for secrets + - local: "/devops/osdu/scanners/scan-for-secrets-node.yml" # containerize - project: "osdu/platform/ci-cd-pipelines" diff --git a/devops/docker/detect_secrets/.secrets.baseline b/devops/docker/detect_secrets/.secrets.baseline index 813a3817..213c2787 100644 --- a/devops/docker/detect_secrets/.secrets.baseline +++ b/devops/docker/detect_secrets/.secrets.baseline @@ -87,6734 +87,15 @@ }, { "path": "detect_secrets.filters.heuristic.is_templated_secret" + }, + { + "path": "detect_secrets.filters.regex.should_exclude_file", + "pattern": [ + "npm-shrinkwrap.json", + "package.json" + ] } ], - "results": { - "devops\\scripts\\azure_jwt_client.py": [ - { - "type": "JSON Web Token", - "filename": "devops\\scripts\\azure_jwt_client.py", - "hashed_secret": "3390a0ba726675aadafe9f6858917d205235fb46", - "is_verified": false, - "line_number": 53 - } - ], - "npm-shrinkwrap.json": [ - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "713070d135406d8985f0bc8ecebded953b8104d6", - "is_verified": false, - "line_number": 10 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "83abd804165c868257ebc0d94b2ed0372e0b292b", - "is_verified": false, - "line_number": 18 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f2d2c3234574c75a4acce65d9d0f15f348e6df73", - "is_verified": false, - "line_number": 23 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ce946d10acce7264938322f4cd59799286682fcc", - "is_verified": false, - "line_number": 34 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1bee111a8c7715006eb942992b5cdf9b5ffd0ac9", - "is_verified": false, - "line_number": 56 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7a0586b51936eb843aedbb5a3832217bebc3eff7", - "is_verified": false, - "line_number": 66 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "204edd14679f8fbbafe4e933df4a8365cf34f399", - "is_verified": false, - "line_number": 76 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "304e6c1afc33f1650678a8d462cd8ee7922543fe", - "is_verified": false, - "line_number": 83 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5cc6f0b81da8d169b3828eff239831832f634828", - "is_verified": false, - "line_number": 94 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "08f360a813f1b98f654e9cd644a894cf7d57e61b", - "is_verified": false, - "line_number": 102 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ffb10289035e255730999470c2c67ff59197203d", - "is_verified": false, - "line_number": 112 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8ecd6866e9580d7008fe74a0650b5440071194a6", - "is_verified": false, - "line_number": 129 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "99a2673cb856b1ff3876b80fb69940edf52390f8", - "is_verified": false, - "line_number": 137 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "84acac03db70c555cc0810b2709d07523cc3370d", - "is_verified": false, - "line_number": 149 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "77270bc39d4835f004bd03e3ebce6d367b65f529", - "is_verified": false, - "line_number": 166 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fd933c71e82d5519ae0cb0779b370d02f6935759", - "is_verified": false, - "line_number": 176 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a33cb141db456be963a83db4b2f415a6b6753b3f", - "is_verified": false, - "line_number": 183 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "57b038078cea8a7bb0479bba9395106d9c57a0ee", - "is_verified": false, - "line_number": 198 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "48c17d7a69cb9714377c0c661759572fbebbae3c", - "is_verified": false, - "line_number": 206 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "06387d2796daff2f9ddf3c7315badc06d326e0fc", - "is_verified": false, - "line_number": 222 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e95698d066d3ab0c0c947ee88d9ef4a9359903b7", - "is_verified": false, - "line_number": 231 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "756444bea4ea3d67844d8ddf58ad32356e9c2430", - "is_verified": false, - "line_number": 263 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9fda10771117cd0838110f9ecf461dd956fa92fc", - "is_verified": false, - "line_number": 269 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "57bdf3aed066780f7864443187199836970a2413", - "is_verified": false, - "line_number": 277 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fcbdcf8dd47a7a8b6e45d714118cf01dc2940a3b", - "is_verified": false, - "line_number": 297 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f32f3df3e6b9cf9ce337f01a56201efdec813748", - "is_verified": false, - "line_number": 308 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f793b0bc967cdaf2a5e532fa4f41a574b0aa6234", - "is_verified": false, - "line_number": 317 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8715705a5698c6b4835b2341fd629a17e00552f8", - "is_verified": false, - "line_number": 326 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b697ca0055621834a13107d5d0c401f4c2c889de", - "is_verified": false, - "line_number": 337 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ed5695eb040e5c940801b8d72eb96490e4b2f11e", - "is_verified": false, - "line_number": 348 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bb05672f29d196996d896664a1b8ab1d5b96fe4d", - "is_verified": false, - "line_number": 357 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3de084e244b8cee5e85a65912415cc90ea37b393", - "is_verified": false, - "line_number": 368 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8368db68b0ace9e898989e5e645c5e1eddf99b11", - "is_verified": false, - "line_number": 374 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c8487eed1393b0a748ba9dc962882e46fddcb393", - "is_verified": false, - "line_number": 385 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e03d2e7f94cae96de01e239439396d9c76214431", - "is_verified": false, - "line_number": 391 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "12b26ade82b19da64ce07e048c7878c3b9b8c226", - "is_verified": false, - "line_number": 402 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f53722a143bd2448db211cc541abe739b052af54", - "is_verified": false, - "line_number": 430 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0b472e36aa0acfbb6d7a6efc9ca9fcb36b77a570", - "is_verified": false, - "line_number": 441 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b67f98ee32923667953241d816d9fd8b73b05031", - "is_verified": false, - "line_number": 457 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "06884be634acb9ff16562ab93522093244b75a4e", - "is_verified": false, - "line_number": 465 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "922ac7db4914c20910496a41c474631928d6c2f2", - "is_verified": false, - "line_number": 476 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d5e822897b1f37e6ce1a864e2ba9af8f9bfc5539", - "is_verified": false, - "line_number": 490 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2a57a9814486d6f83257ec94e65d1024819611b8", - "is_verified": false, - "line_number": 495 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1b8baff471379ae80650e5966c6455bd1bfc3e9f", - "is_verified": false, - "line_number": 505 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "321d8a37da2048b7932d3e801da87b02fb55c03b", - "is_verified": false, - "line_number": 512 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "29677635c24f38ef76d0ce8c0ff4014bc0e622c7", - "is_verified": false, - "line_number": 528 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e53e2b721d313d270aadf533b0c8ea15603d9b7c", - "is_verified": false, - "line_number": 541 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1dea4ebe4fcca28841d636b8746d4e405a5f84a7", - "is_verified": false, - "line_number": 551 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e126351ec9125a7f29dd9ce40ff1c4746a177c77", - "is_verified": false, - "line_number": 561 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "67da6a18e55c239fbc3e01dbcc87f0c915533121", - "is_verified": false, - "line_number": 577 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6f1ca2e8e002edd367bb8d5ea36ba7a11e1c7e9f", - "is_verified": false, - "line_number": 593 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d7a768e2790978c276b4aea6aa150ebd4eb11aa4", - "is_verified": false, - "line_number": 600 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "771c004033094f92422624303105d5fbfa354622", - "is_verified": false, - "line_number": 642 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ad42fb5aaad2ee89c59dfb5d15510ff787f82bc4", - "is_verified": false, - "line_number": 651 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e4865c8840af7e0bda1f5e5ba4660f31f8258a5f", - "is_verified": false, - "line_number": 661 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "650424494ee4e850247a2758430e457f4565ce20", - "is_verified": false, - "line_number": 669 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "84a2bb6415dd8f86ab37242e1ae5f4c521f1b148", - "is_verified": false, - "line_number": 680 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0ec51849544eb8570c85a3a30a28c3ecffa20916", - "is_verified": false, - "line_number": 692 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0644458e8c9bf33f5b0e57659e364d25d63c5558", - "is_verified": false, - "line_number": 701 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "093e4712596c8906a9d71ae1a85d19a0365b49e9", - "is_verified": false, - "line_number": 717 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5a19590e07656d46716b85402a38bb5ab5b0cc13", - "is_verified": false, - "line_number": 725 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "99b3665d4d90125291080d6a5bd3ffcfab884722", - "is_verified": false, - "line_number": 736 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2a9de3b5d16a23ea19ccb4938ca38f28aeddff73", - "is_verified": false, - "line_number": 741 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "75c933d323a527128cef3c231b1bd71037848755", - "is_verified": false, - "line_number": 751 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d7cdb9c755d36ef6bba01ff385c215194d07c523", - "is_verified": false, - "line_number": 760 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b59f2dc6dc242975c0a10b77533dfdbd813c248d", - "is_verified": false, - "line_number": 768 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "df92b1a39f67f3eddfe1c63b4285ba2fccac7b67", - "is_verified": false, - "line_number": 780 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "44c7ecfd47e1b85be18de43744314e6ab196b697", - "is_verified": false, - "line_number": 788 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "03edbe2e35e4244d03ec1f59ae4b9e86cb180365", - "is_verified": false, - "line_number": 793 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2b7a737724211b0aed56463a3bc6221932af375e", - "is_verified": false, - "line_number": 800 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b2d4223382b1bc4f5471250f157862aee163be4b", - "is_verified": false, - "line_number": 917 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "845dc099e966cd856142787f8cbb61fe439e4e00", - "is_verified": false, - "line_number": 932 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e8d1e590a9d972bd90e5d5d3a603a14ca8d8ca4d", - "is_verified": false, - "line_number": 954 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cc9188e0e274fe4b8d24847a7a65c0e1a14845f6", - "is_verified": false, - "line_number": 962 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f53d74d7bf1f9ba773f743e6d3fcafc577ad4d8a", - "is_verified": false, - "line_number": 967 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2b898a45b55bf8f54b9738420aee1eadcc6d2c54", - "is_verified": false, - "line_number": 988 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7755950a3e5a7312d1f51644839c8758c84b6e66", - "is_verified": false, - "line_number": 1043 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "09a98c65fca85f505c79f4e2e8f8677d76fa09e7", - "is_verified": false, - "line_number": 1051 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "53227afa9451947bae9e8cf7b81a284c75fbf423", - "is_verified": false, - "line_number": 1059 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bbf8abeac9229f5feff9d0c77c8357bf3077e697", - "is_verified": false, - "line_number": 1071 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "461f36bca1300527f8ef4343dcea8ed8d1c0592f", - "is_verified": false, - "line_number": 1076 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "61642c5726c683482266d7c1767ea19ace67e6cc", - "is_verified": false, - "line_number": 1088 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "82716fc9093c847e6ec9bfebaa83eda6f605b3e5", - "is_verified": false, - "line_number": 1097 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1a003141957154f332dbd5c46b806e1cf4b55c26", - "is_verified": false, - "line_number": 1113 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "63d9b233c4c6726db3eea4d792836aefd414617f", - "is_verified": false, - "line_number": 1164 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "50e36c365704961fed30718c52e5a022842f002c", - "is_verified": false, - "line_number": 1176 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a11673480042654afdc38575309b1419e9d291a0", - "is_verified": false, - "line_number": 1215 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d69c03a6c481565a321e7b90776918eaad16e532", - "is_verified": false, - "line_number": 1225 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fd33dd14173bfd70078d8447a2a8fc99ff1cf02f", - "is_verified": false, - "line_number": 1235 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0953b82fdcdc848b166e849bf9321103a59b43d0", - "is_verified": false, - "line_number": 1258 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d92befdcf0dd4cd007d91c5f0e9e244584b83988", - "is_verified": false, - "line_number": 1284 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a2440e4822a884042f53c59108ecc51311780c93", - "is_verified": false, - "line_number": 1300 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "554bf1dc2efb739ca897b0b3f359ba3569dabb12", - "is_verified": false, - "line_number": 1345 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c85e816bdd25dbf61ad965be1968207ab85423a9", - "is_verified": false, - "line_number": 1388 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f1a98f3032e42cfbc7de8f25a5e7d2a9cc2ef245", - "is_verified": false, - "line_number": 1405 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "463e94fb25c6fe5ecc09be54b8ef54e1a85d6d9b", - "is_verified": false, - "line_number": 1417 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "059d50c29fd1544cda7e0d3145bea62afb837504", - "is_verified": false, - "line_number": 1428 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "53eb81011e58d13ba36abf0a63335aadd4018a92", - "is_verified": false, - "line_number": 1440 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e6faa8eb0aeed0c05a213ef7a7956139c794d07f", - "is_verified": false, - "line_number": 1460 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1c1c16799957f77d54bac4782677b9b1e1c2a0f3", - "is_verified": false, - "line_number": 1465 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d5ec021cbb92c3486e38fac176f4f59a6c1d92e8", - "is_verified": false, - "line_number": 1526 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b27ff3ac762b6be92fb5f3d3d3808f18a77e63f2", - "is_verified": false, - "line_number": 1563 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "622a3612bd67f8e5a4483d7ddb99a3eb02668ef5", - "is_verified": false, - "line_number": 1573 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "10539f1a5f9805d0e2798637338bc2f23c05837c", - "is_verified": false, - "line_number": 1588 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "17de9618066016056e7d1dd8690049fe6159a218", - "is_verified": false, - "line_number": 1597 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "accd3d42ae3e5a54f5c871a2c507ec4d5955911f", - "is_verified": false, - "line_number": 1609 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8c52ca0333f52041452294fac04a9d131857498a", - "is_verified": false, - "line_number": 1617 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3267e201609bb7bdc3ffdfd9c041536d4878bdba", - "is_verified": false, - "line_number": 1623 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2f7616613b9a1365c6bd51db2725d55351eaba7d", - "is_verified": false, - "line_number": 1647 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4f17038a7f4c22cc94c842753eef5e7fc81087a7", - "is_verified": false, - "line_number": 1670 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7df64a619d00be88db778db8ded581dbeec4ccf0", - "is_verified": false, - "line_number": 1679 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "22c2070640ae8ee15a21e0938de09b1c70a22fe8", - "is_verified": false, - "line_number": 1694 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "36cef48debb26fe0dff6721ad27a0a482cfbc372", - "is_verified": false, - "line_number": 1705 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8675afed357f047e9999e4bf8e2a7c2d33400dde", - "is_verified": false, - "line_number": 1725 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ae1e79c9fe967805b9aefaba1322e28f7589f954", - "is_verified": false, - "line_number": 1759 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "22c5290c63ad664e1a226cc04eff3d5a10c70e7f", - "is_verified": false, - "line_number": 1792 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aad3d26852c0d24314486991e4ed4235c00746db", - "is_verified": false, - "line_number": 1797 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "43dc0d46006033cc67b0e0b9080247b4a346c193", - "is_verified": false, - "line_number": 1805 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ba583b7d05f061b91093b947efc72b674177be51", - "is_verified": false, - "line_number": 1810 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "729d707b3a1922c4b5fc4075869f618fcec6cbe5", - "is_verified": false, - "line_number": 1841 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "31e40475feac5ac39452c59090abfb5b60d8779d", - "is_verified": false, - "line_number": 1856 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "14e736d5c6fc8d1b8c28f8b75b49296816092977", - "is_verified": false, - "line_number": 1880 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c4df4b6857390c2d58bff0e0230b0e7d39a6f88d", - "is_verified": false, - "line_number": 1885 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "40d3d610ad244612a19fb1750014aaf7f6b4cadd", - "is_verified": false, - "line_number": 1912 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8d73d8305636ee95590d6dec473b9b324bcfbe1d", - "is_verified": false, - "line_number": 1917 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "69b85e63f93da0757b54ca7c4a1af4c8a970d3df", - "is_verified": false, - "line_number": 1923 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0488335dc41166beb78a0f6963a8f66a78d5c020", - "is_verified": false, - "line_number": 1934 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8623abb3e657eb53add3e32d2d18abb9c431688a", - "is_verified": false, - "line_number": 1943 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1db167079aca7da50d198b964334b75bd9983db3", - "is_verified": false, - "line_number": 1948 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e60716d47e13d2b0cb49517ea127da3badd9cae3", - "is_verified": false, - "line_number": 1953 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f0361d8610a19499075c201031a4e07204f1d32c", - "is_verified": false, - "line_number": 1958 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "092a06ab0d3a8c26a47f45169e3e6d38e3c87e5b", - "is_verified": false, - "line_number": 1972 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "20926572a6704aa78aa0522110a45e5f249bdfed", - "is_verified": false, - "line_number": 1977 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "30abf9a0558fd0de2140d62a73b06c70ec18fea4", - "is_verified": false, - "line_number": 1992 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "497aae2deb0d31695c26b84d87ad47682b7f58b5", - "is_verified": false, - "line_number": 1997 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "64be812ac39fe54ed19b43be21c324ede58f9f6c", - "is_verified": false, - "line_number": 2006 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a467aa05ca90f90f5517cce12f703faf34ea1eca", - "is_verified": false, - "line_number": 2016 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "27fafab8e5c0ddc1b46027566a2aba46cc2bba83", - "is_verified": false, - "line_number": 2027 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bdb947c3defd69d133bb734bd12ee8c5f31252c2", - "is_verified": false, - "line_number": 2033 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0b95da5a90e063654ae7a967bf2a5d618c123b22", - "is_verified": false, - "line_number": 2038 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "526bb100634721b37b7bb842dec9be5464895b4d", - "is_verified": false, - "line_number": 2044 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "49d27122dda1f0e47ccac08fba63472df1c81b35", - "is_verified": false, - "line_number": 2053 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2ffec92ba1cb96465e9e975f35c07dba37f48d9c", - "is_verified": false, - "line_number": 2062 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1e17cf7a1c7d35d4d7a479798ae539805e428215", - "is_verified": false, - "line_number": 2067 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aa53b50cae152240536c42608dfd1154376095c7", - "is_verified": false, - "line_number": 2073 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "42159d8280931108aa5fd79ba75fb843f8ef5074", - "is_verified": false, - "line_number": 2078 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "08721f9a3f4bfb7b2ed44a9ee4f7909bc053cf78", - "is_verified": false, - "line_number": 2086 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a256b8b56c449c01cadffd43992a2de79202812e", - "is_verified": false, - "line_number": 2095 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f8cef343c17439abdc44a70f71bbead879800f41", - "is_verified": false, - "line_number": 2100 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "372580ca6d48f74e9d6475fb06b95ac6abb6177f", - "is_verified": false, - "line_number": 2108 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d42378cd4f3022e5e1679bfe8c305a2eb647a8c0", - "is_verified": false, - "line_number": 2118 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c4c891e3b72ac2f38c382043372c568ea603db97", - "is_verified": false, - "line_number": 2127 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fc1b34d2dc0a8f6cf0d8ded30c0771de52ae7168", - "is_verified": false, - "line_number": 2136 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "da2b2e6016b026ace10c6f757158d0a6319bd9a7", - "is_verified": false, - "line_number": 2144 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7a0c87cf97098eebf654745cd3e70cb104c8fcd4", - "is_verified": false, - "line_number": 2153 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "87c55a124423f0b218a83a3393ec37d6e0d5bc4a", - "is_verified": false, - "line_number": 2162 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6d0e2933ecfe11c9e87a3413b950ece209578a44", - "is_verified": false, - "line_number": 2167 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3b8be9cec99ddc9af28d1557040d2ddca4b800c7", - "is_verified": false, - "line_number": 2172 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "21f3f2677475d82d3bf785d6f9a5abe017b5409b", - "is_verified": false, - "line_number": 2178 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1b4fd356c693949bd6dbe6ca9f93bfd77b9d18ad", - "is_verified": false, - "line_number": 2183 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bf94cff1cc679cbf00b825d3e3c57f36f39149ec", - "is_verified": false, - "line_number": 2204 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b8e8ea78154352778ce6c41eb733ea459cbca784", - "is_verified": false, - "line_number": 2211 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "507093beab002cb5176cc4fdd361d39b35a43368", - "is_verified": false, - "line_number": 2216 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9662148ac502422b7aaddaa921c4498ce5daecf2", - "is_verified": false, - "line_number": 2225 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "19a103962827d9a8dbb0b4509f908c1612a9950d", - "is_verified": false, - "line_number": 2234 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f0a8e7c444683f9e5309d3a1443150b19880c4db", - "is_verified": false, - "line_number": 2245 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "33c32f149b326f1bce8159a62091a38113c3c43a", - "is_verified": false, - "line_number": 2257 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "76d2249ba356abb1bc625726cfb043aa796daf5a", - "is_verified": false, - "line_number": 2267 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e7759899809903d19e7f57fdb8cf18d942398370", - "is_verified": false, - "line_number": 2276 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f1446b84cd677644bb3e9ef0d2e604cf88fc48db", - "is_verified": false, - "line_number": 2282 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "50936f6afdebc8f7c93616c1bd01e55d842275da", - "is_verified": false, - "line_number": 2292 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "72423082199cd7cdad4314ac5e82899b11cf695b", - "is_verified": false, - "line_number": 2297 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2073ed075f3660a0109af5aebac350ff2cda886e", - "is_verified": false, - "line_number": 2305 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "87b487b84c6bef6374fb6933f828386080f4f1d3", - "is_verified": false, - "line_number": 2323 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "471e5e779b70df804b6e5e97a9b911362542657b", - "is_verified": false, - "line_number": 2329 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "86c936c2fd0b15334fb3e7e08ea42b385c42f7a1", - "is_verified": false, - "line_number": 2334 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a896da46c897d3a0d007843006621f78dbcabf51", - "is_verified": false, - "line_number": 2342 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e2e1866b6cbdf718d5683064e5d5bccbb0ba8228", - "is_verified": false, - "line_number": 2351 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "39fb362f866f2bfcb16260885e930433ac3f8d7c", - "is_verified": false, - "line_number": 2369 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "944def249b215292d02ded1190ecfb5f71bd00c8", - "is_verified": false, - "line_number": 2379 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bfa6c39120e1c303eb1f72e66462ca249e6e5cbc", - "is_verified": false, - "line_number": 2390 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "845aaf24f7f1104268d267c929cdebb56ca61a40", - "is_verified": false, - "line_number": 2397 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ed7712d7317e2fbad8233dc59efbc310b5705d02", - "is_verified": false, - "line_number": 2403 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4b7c01ffdb93e38512115795b5e932ffbc79e3cb", - "is_verified": false, - "line_number": 2409 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "04f6724bc54be9dadbf0a7b2a5916460994d7be1", - "is_verified": false, - "line_number": 2414 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4ed49acfbd180533265d2099f3043963c4a24443", - "is_verified": false, - "line_number": 2423 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "428e72f71455a785963f1df5f85c26c6d6ae519b", - "is_verified": false, - "line_number": 2431 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9e71fece302483bc1cf82ff86e2f56424519a77e", - "is_verified": false, - "line_number": 2438 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4bb32f26b9806cc5d7ff736eb5b8558703f06c45", - "is_verified": false, - "line_number": 2448 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a4a113de019fbdd3f34fea984eef9cc297765d60", - "is_verified": false, - "line_number": 2457 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "791ecf9e423ab1d079a50373301ed79bd563b0f5", - "is_verified": false, - "line_number": 2468 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d208a8d2ee01ca62f09802c275315818f647735b", - "is_verified": false, - "line_number": 2477 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d15154431f7643ba9cb80a63908dc01cce20f928", - "is_verified": false, - "line_number": 2485 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "153275cdb65dfb567514d1aa57fc1a5f14937b3e", - "is_verified": false, - "line_number": 2502 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "afcd43c83599fb9d4f180692c01ff53ddc76b456", - "is_verified": false, - "line_number": 2518 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "17c6bf5b282a544965220dd188f8f72b3e02a1a3", - "is_verified": false, - "line_number": 2523 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "af8ad2e9093afba6092ace2b94e961b830d0ad49", - "is_verified": false, - "line_number": 2529 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8e813f242a94030aa828534fc28df6fafdefe7fc", - "is_verified": false, - "line_number": 2567 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d2eb4e9361fd3c06052590c09d8b407f1753b2d4", - "is_verified": false, - "line_number": 2573 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6ebe9724873357aaea25e329efb726fa61b843e7", - "is_verified": false, - "line_number": 2581 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5c9f3871e62f3bdd36028c6ee53279e5f224db6e", - "is_verified": false, - "line_number": 2586 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9bf5a02716806b93f2fb4acb11c748669774a14f", - "is_verified": false, - "line_number": 2592 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f1dbba169db046906924ccd784068a2306096634", - "is_verified": false, - "line_number": 2597 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2c7bd6cdc39b5b8a0f32aa11988a0ec769526cdb", - "is_verified": false, - "line_number": 2605 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "74106597d0b482d1234b7c43497027a1296250af", - "is_verified": false, - "line_number": 2610 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8c58890089d3de44638169ab4a4a6ae85c68c681", - "is_verified": false, - "line_number": 2616 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2f536f5e6b76b4cbb0f65e1142a4f9ee52b7625a", - "is_verified": false, - "line_number": 2622 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4e5c67f7930c0aff81ff1e76e4c34ab88a915d61", - "is_verified": false, - "line_number": 2627 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bde39883b29c55ee0bac5f04bf3f3a3b1cef7d0d", - "is_verified": false, - "line_number": 2635 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9787d966f19a0d8d0021b31d34cfdfcebdb9c28a", - "is_verified": false, - "line_number": 2651 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4567385b3781de8782dbfa51501b2dde0b8bfadb", - "is_verified": false, - "line_number": 2656 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c4fea87bd49c4427d7215d57ada9ff3177e0c471", - "is_verified": false, - "line_number": 2672 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "12917e7235ce486ca51a296b896afa5e3b4fda54", - "is_verified": false, - "line_number": 2677 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6f9bfb49cb818d2fe07592515e4c3f7a0bbd7e0e", - "is_verified": false, - "line_number": 2682 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "307a947aa422c67fdefb07178198a004fb2c0d94", - "is_verified": false, - "line_number": 2687 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0ba2fc9a137313ae1fdda2b5476dedf0595bda3a", - "is_verified": false, - "line_number": 2696 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fa83dcbf0f435ee38066d19a2a43815510f96bc4", - "is_verified": false, - "line_number": 2703 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "017a7eab3d63331ecfe768927c8907a5a31888e5", - "is_verified": false, - "line_number": 2708 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b37bab170091339c9c57b06d90d99229a7f7bb78", - "is_verified": false, - "line_number": 2713 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "456d02ad0d4d84a2516934ac4cd212b702a35971", - "is_verified": false, - "line_number": 2721 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "92b56edda4f2906f548fe77c015490e6ba2ee4c3", - "is_verified": false, - "line_number": 2726 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7c3f84a55fce488eeff7609ffd1798b4b0346079", - "is_verified": false, - "line_number": 2731 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "936b0959aa13f1decc76be1d80acaac0860847b7", - "is_verified": false, - "line_number": 2737 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "95cb14f25b6629e7828a931248a07a18cf6be9c2", - "is_verified": false, - "line_number": 2745 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "408691ddec57537e414a6a987b08f20540a202c6", - "is_verified": false, - "line_number": 2750 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e2f8ed204b081d28612cca592b04d252763cfd43", - "is_verified": false, - "line_number": 2756 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4bad86c43b7cd06efc130272d8e4de2b32636371", - "is_verified": false, - "line_number": 2761 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8e948a3b773d1a2e4b6f4220216efa734315246d", - "is_verified": false, - "line_number": 2778 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f883f0bd87d8455814f491e2067bd3f62454c7c2", - "is_verified": false, - "line_number": 2786 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "19eea0e64f6a3311b04e472035df10c23f23dd0a", - "is_verified": false, - "line_number": 2791 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "98aa604e1da31f4b40ed3096e18c8a3cc51786b2", - "is_verified": false, - "line_number": 2798 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3aafb400e42871c4a994eba8013e4ff1034c2724", - "is_verified": false, - "line_number": 2804 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d61249f34437705a28fb8b6097dc589a6bfc96a0", - "is_verified": false, - "line_number": 2813 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1719f9e62d0306988a3deefa5d1dc1ea15f69149", - "is_verified": false, - "line_number": 2831 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f7c71d8da72d650036ab8a5dc50df05fe99976e9", - "is_verified": false, - "line_number": 2836 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0512e37fbedf1d16828680a038a241b4780a5c04", - "is_verified": false, - "line_number": 2842 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "224c4e17a99b292b077da584c8aa5fb090ba1b25", - "is_verified": false, - "line_number": 2852 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7d9cd3243acfca649da3f02815907f3c86e33d62", - "is_verified": false, - "line_number": 2857 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7fbed2685f32de994e74206fbb2e09c45f2fb94a", - "is_verified": false, - "line_number": 2862 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "67f242ccd08bbb3427a629b98d96d67a203136a9", - "is_verified": false, - "line_number": 2868 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "549c6a72a5d6d8822b1175c0205f7800f5a75e1d", - "is_verified": false, - "line_number": 2893 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0cc93dfdf4ae08bc374b99af985b25d2427f71d8", - "is_verified": false, - "line_number": 2908 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8f3f0a93cc4a16f194259e584268af391102d785", - "is_verified": false, - "line_number": 2913 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f9079c4430069e1a3a8253651fe4b735f6cbe32a", - "is_verified": false, - "line_number": 2919 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "81cb6be182eb79444202c4563080aee75296a672", - "is_verified": false, - "line_number": 2931 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7e0c8e7bebd3b26c7a99961ec3498c0448dcb08d", - "is_verified": false, - "line_number": 2940 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8df249e12908e83fb392833e658e97db5ba1d3dc", - "is_verified": false, - "line_number": 2947 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "80f8d53f3fedde239f695d6a4c44c78b4aff0a44", - "is_verified": false, - "line_number": 2958 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7ef3be27b1019d26ffd25b7ed25606dfb7b22220", - "is_verified": false, - "line_number": 2963 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dcf32b4254051ffec36827bb5f20b51a69e313be", - "is_verified": false, - "line_number": 2977 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "086b47ff4b09d5daf48fc11a12842df114051a64", - "is_verified": false, - "line_number": 2986 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "69e4418b2ffb487c86b50465bb7a8dd539577c3f", - "is_verified": false, - "line_number": 2991 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c710e3c6295d433d76945e9e648144440ff6881c", - "is_verified": false, - "line_number": 3001 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9f47ec1bf4b8df99f19ef00c4a11c510ee3347b6", - "is_verified": false, - "line_number": 3007 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "488689dc072b37207fc8513887479813ac502de6", - "is_verified": false, - "line_number": 3013 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "524069c0f6f8b9db9c28bc746b82f4fe8fa0891e", - "is_verified": false, - "line_number": 3025 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9dea089983c59e5976cc041563d338d52f197e66", - "is_verified": false, - "line_number": 3049 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1d058af75c5e26cc0359ac1630d62782f1b954b1", - "is_verified": false, - "line_number": 3055 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4424ddaeabbc0908ec6235fa847252d5959a08fb", - "is_verified": false, - "line_number": 3063 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b876eadc4946ae55efa33b36bef38d9c6dbc5c98", - "is_verified": false, - "line_number": 3079 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0d8b99381e4ee2312c7def98de2115a8f75f866e", - "is_verified": false, - "line_number": 3084 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "00e8ad95806422c71e6e3358849f10e0402681a4", - "is_verified": false, - "line_number": 3099 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cd0805877953c8437edffdd24713ec0068038620", - "is_verified": false, - "line_number": 3143 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "27826961cc0c1f0c8172c7ad27c44059d1cf1cee", - "is_verified": false, - "line_number": 3154 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7bc2a29249d4c79d00152e6b7e23f1bad50ee72d", - "is_verified": false, - "line_number": 3160 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ee9eb6d176f9abeb924e7fedd2c0b168ff10e28f", - "is_verified": false, - "line_number": 3166 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "af6a2fcdc5ecdaca9a4afc96918a7e99bd8d12f1", - "is_verified": false, - "line_number": 3176 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1c0091e3807e7f15cfafeef8f012579de707a801", - "is_verified": false, - "line_number": 3187 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "09aa5b652da2e32aebb7e4c74e001d604b48033b", - "is_verified": false, - "line_number": 3193 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a033617febb0b833a00a6ddfe1dd31dcabd6adc1", - "is_verified": false, - "line_number": 3233 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b1739b5f43d946a0b8a9b1d58f304433370834bb", - "is_verified": false, - "line_number": 3243 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e5ef6e6610482d5fe2e6952bec2e03dd7970534c", - "is_verified": false, - "line_number": 3253 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "996f5ded04e1d5db379c4155b224c99550e48ffc", - "is_verified": false, - "line_number": 3270 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fb3644382a0358d484186a7907448991a47f4763", - "is_verified": false, - "line_number": 3275 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "473d6a2d432e392ff85b80b322481af2aa9cc0a4", - "is_verified": false, - "line_number": 3281 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a13adfb7b0fc319e6f4f83858194caf0a49df09f", - "is_verified": false, - "line_number": 3286 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3da27985279d7d55ced598655b77d5a3aef28e39", - "is_verified": false, - "line_number": 3295 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "31b0a06708bb059b62b759353c5febcba276fa4c", - "is_verified": false, - "line_number": 3308 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c182e71713f8c76e48acdb19a541f4a6da57de26", - "is_verified": false, - "line_number": 3317 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a535737cf069592de2c7e1259736e930ff75bf18", - "is_verified": false, - "line_number": 3322 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "83307cb75a4a44ba528f4a0aefcec2a8018dc6d8", - "is_verified": false, - "line_number": 3331 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ba2511de309f557383cb669b33877739a452da3a", - "is_verified": false, - "line_number": 3339 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9e410fb138ef51bcc2e742322de1c7db1c1639f3", - "is_verified": false, - "line_number": 3381 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "595ca7bd5bf071dbe45866459c0457fa37834267", - "is_verified": false, - "line_number": 3402 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8f2d13e4f45ae4895bfd83f17e0f27556e4870a2", - "is_verified": false, - "line_number": 3419 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4cfcfce29718cd8a83f4d86020d252153380a3df", - "is_verified": false, - "line_number": 3425 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ed0d6b851c4d28971dfaa6fa9ea87e24c09cccd5", - "is_verified": false, - "line_number": 3431 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "26f76deebe03d118284ce3a2b105ef284a3af65b", - "is_verified": false, - "line_number": 3439 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d4f0bec7c77821e9cbe25505afb224a19f55bfdb", - "is_verified": false, - "line_number": 3444 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ca5991846a5c9f1941a9f711b31379a95e24f92f", - "is_verified": false, - "line_number": 3455 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "82f698d0f7c81831a5b7369291342042521765f7", - "is_verified": false, - "line_number": 3468 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f139a49e56f7947e44506a34ceb737079ef76c58", - "is_verified": false, - "line_number": 3473 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c96d81662cc7919208154e7152fa0033391b7bcd", - "is_verified": false, - "line_number": 3478 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7156492f40fb2479a45780b3d2959c29b27b6374", - "is_verified": false, - "line_number": 3493 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c419c7b20a8991013630cc9a1e675aeb32a0f28a", - "is_verified": false, - "line_number": 3498 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bdbf4e0c92fdac99fd100b18303b3ed73b149bd2", - "is_verified": false, - "line_number": 3507 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e094c7fbaceb29f934250986a62b0eeca3874320", - "is_verified": false, - "line_number": 3513 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "885304335818f51938422166d361cddacfd626d0", - "is_verified": false, - "line_number": 3530 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "915ca894a8ec19ffcd55555e6c8daac1fe882751", - "is_verified": false, - "line_number": 3535 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "77ab5bff023eea717c8dd87ca838b36ef8b335e8", - "is_verified": false, - "line_number": 3540 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3ce7e0b6dfac0fdd6cfb5bcea5c87c1694432831", - "is_verified": false, - "line_number": 3546 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ec8a83737b73d60d903f68891f613a1d4d017aa9", - "is_verified": false, - "line_number": 3587 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dac0640634507d1e51d1abb71fad3023e8efe72c", - "is_verified": false, - "line_number": 3603 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7936c50d635af51c7be94d8b52da77b365c31671", - "is_verified": false, - "line_number": 3612 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b8a0215d626bc3960dbf9a778e6b73ed1e0f1239", - "is_verified": false, - "line_number": 3626 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "caa11587d4daf3e87d31dd141e8b8a869e7c738f", - "is_verified": false, - "line_number": 3632 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bdec0bd617c266917184ad0e32fb2baa5704329f", - "is_verified": false, - "line_number": 3641 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f0257d02d23f53e799476af74cf0386375d4b6c2", - "is_verified": false, - "line_number": 3652 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "753517b924727827ee24c9a5a84b35aaf51128a7", - "is_verified": false, - "line_number": 3669 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "565f1fcd24069ce5728ff99d1855ca96859b8e45", - "is_verified": false, - "line_number": 3675 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "85d854730013e2c2f1f8d6fd55d4c672476a6ad8", - "is_verified": false, - "line_number": 3680 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f4ac69f86117d727d4c62178f3ab0d03d7f97c60", - "is_verified": false, - "line_number": 3689 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5f0b39878136f8042cc63be336b0b69e6235b55b", - "is_verified": false, - "line_number": 3701 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5a0ea0c228c0fbd308c174ff4d187eedf3dcc0bb", - "is_verified": false, - "line_number": 3707 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "adfec6e1850a9f4a7705b1baa93921d21fcf6758", - "is_verified": false, - "line_number": 3713 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aee5a7c076977d95a08bd6e74758096e1e5b91a0", - "is_verified": false, - "line_number": 3765 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7ea379a1bf787a21401c8c39f285e4e84b478d72", - "is_verified": false, - "line_number": 3770 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c90fbbdafcd2a572535fd18892dba4aa9bc721a7", - "is_verified": false, - "line_number": 3778 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f6d8fdcbba275dba71f7c782241d7accc26f5e7f", - "is_verified": false, - "line_number": 3784 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "eb4d4fbb2a8fe7c662b33090a5904096526b2ddc", - "is_verified": false, - "line_number": 3789 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4eeca95460b80b98040506156a63e01a0bbf6904", - "is_verified": false, - "line_number": 3794 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f5792251434753c66297a82d9cf93ab8435cc9d4", - "is_verified": false, - "line_number": 3800 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "04e99d547ab23aa7aa1a1ef93da0b1a9cc0f0ecb", - "is_verified": false, - "line_number": 3808 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7d6c45d0c459f7efb2978ac36c219a40cbeac40f", - "is_verified": false, - "line_number": 3813 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f8e8b3ecfaea3ca0fd7439ae665d385c68212acb", - "is_verified": false, - "line_number": 3818 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bbec2fdf1cf26c70a7f2eb82f9f24fe4b29125ea", - "is_verified": false, - "line_number": 3824 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "001d1c5b6dd68dc1c73d24adfd6cef9918a5bc95", - "is_verified": false, - "line_number": 3833 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c6b86cf7a4ca1c82d4a9480545155c459983bbeb", - "is_verified": false, - "line_number": 3844 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "38a3fca8018967df3821ca47a5cc720110a7da14", - "is_verified": false, - "line_number": 3853 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1a05c4be165ca48209a3c1f561e2f5e4dd6526c0", - "is_verified": false, - "line_number": 3861 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8564cd9794f0fd491793c15ef1f21ee599773c26", - "is_verified": false, - "line_number": 3872 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "04450eaacfa844f84926d04d6a07534cde99b28e", - "is_verified": false, - "line_number": 3880 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "77327d599243a696396c7c064135e2e17f6d24d4", - "is_verified": false, - "line_number": 3885 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "abc43635d1df70bc42c9e7dea2141b3524dd8bc5", - "is_verified": false, - "line_number": 3890 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b4c295435d09bbdfb91ced9040379166d67ccbd2", - "is_verified": false, - "line_number": 3895 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bb2bf296d6e086b471d45a26af9fd57f55289a75", - "is_verified": false, - "line_number": 3900 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "57c660c5e1b05af3e5f4289afd5601a032cbcfc7", - "is_verified": false, - "line_number": 3905 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "320963fa5a353ec608561f807d1bac47e54acf72", - "is_verified": false, - "line_number": 3911 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "285abbf7263dc60c0f9b71750333e96167d77f0d", - "is_verified": false, - "line_number": 3917 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "390f515c0550965e0edea5bb71a7be1f7107399b", - "is_verified": false, - "line_number": 3922 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2897b720e3de0fe5ec277e64da69a8b53ae44dda", - "is_verified": false, - "line_number": 3937 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c9dded50433bb5d6d64cf2076d3b5c1cdc4e7f58", - "is_verified": false, - "line_number": 3942 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c929055f9a9f2e590f0253543a64a3c89d2e09e", - "is_verified": false, - "line_number": 3948 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "90c4af2cdaf6c6ca3a8bc2ca93a97962be22611d", - "is_verified": false, - "line_number": 3958 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "614e1f521e14e13537760612014052672370955d", - "is_verified": false, - "line_number": 3964 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b38648f9123172da0eb7fca4b21eddb8fc4f1a23", - "is_verified": false, - "line_number": 3973 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a32ffe8d9fdbaeb585585ce8cd7b374a3023dc5c", - "is_verified": false, - "line_number": 3983 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8d0c3a9010c322ef54cf59f2d7b472887a496641", - "is_verified": false, - "line_number": 3991 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4275b7ec9188f3fadc0ccb0c42032f17310199b3", - "is_verified": false, - "line_number": 4016 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "07abcd1238214ff35a7de51fd98de5b3a9f77888", - "is_verified": false, - "line_number": 4029 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fc7b2f07f919c3f8e20aa78a1756d2bcca252fb9", - "is_verified": false, - "line_number": 4037 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aad62e1dae782ae71c8abd98bd29e01e0b3705fd", - "is_verified": false, - "line_number": 4042 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "796925256bc0f4dc43cdfab7fbff852eace18f42", - "is_verified": false, - "line_number": 4052 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f392e7bd9bb3df33f6bf04855bdf5258a9d6e54f", - "is_verified": false, - "line_number": 4065 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8af94d587ff04c1f1a5c8990e2ade46a8fc41f6b", - "is_verified": false, - "line_number": 4071 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ad831cb053700bc85261c0f68d9803a2fa9f5ec9", - "is_verified": false, - "line_number": 4081 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "71bfb9006334eb2e744fdcd6f656617f265d8d6c", - "is_verified": false, - "line_number": 4090 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1d7ba18b4a9edeb908d2ffcb73f3c5558f7a7525", - "is_verified": false, - "line_number": 4095 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "65538215f1409711eb0ad7c14186f1420652be07", - "is_verified": false, - "line_number": 4113 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "48f543ec6c829029183c8ce7904f3873d2eb3045", - "is_verified": false, - "line_number": 4123 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "14308cfbf117dbb6043a80f92e4adec122782cae", - "is_verified": false, - "line_number": 4129 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a572d171ac0cc10b2e331c7d31056e63fcfc9760", - "is_verified": false, - "line_number": 4135 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c06508ec06eccd00fa92cdf8ab20f6ec9d48bbde", - "is_verified": false, - "line_number": 4144 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7e280af4ec2d573144d98e89ed2e1dfd817ca48f", - "is_verified": false, - "line_number": 4149 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "afca0b380a66cc359f66a3e2b1c00103a9b5807d", - "is_verified": false, - "line_number": 4154 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c1e15c09228ec2a5c5301e677dbacdeeed5103af", - "is_verified": false, - "line_number": 4160 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d8863c346b87ab9e420048134928a830cdb44e4f", - "is_verified": false, - "line_number": 4173 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8391286cc1bda9f5510e294af9545020bed4e1df", - "is_verified": false, - "line_number": 4179 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2fcbf434b04ba0a49ae29f1d9ea0edc30881350b", - "is_verified": false, - "line_number": 4185 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "941b3e7836a6f26d32311893ac5d9ad0a52c45ca", - "is_verified": false, - "line_number": 4191 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bdc1322162b3c2d06c4103afb50937bf6085ebf2", - "is_verified": false, - "line_number": 4196 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "34743e1f7d9541c4a726b998f20baf828c694213", - "is_verified": false, - "line_number": 4201 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2fe04172ea20a5306b83ee5fa3115ce9b26a3f05", - "is_verified": false, - "line_number": 4207 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "865a8108fc3bc7f86527f9ac5b6dfc0cded15565", - "is_verified": false, - "line_number": 4223 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0fd9a27b38d94a9d674b1fccc47f3b6a2f61e5e3", - "is_verified": false, - "line_number": 4228 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c8cd52c3cac611b968d949d507c35c91ff317291", - "is_verified": false, - "line_number": 4242 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bcb0a064a9b6f856935b5375646d8de97b234dbf", - "is_verified": false, - "line_number": 4264 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5bf17c4375713f640d891ea4628897bdd7fe4e85", - "is_verified": false, - "line_number": 4272 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3937ac1b11e97055d2054a588e474d9f427016d1", - "is_verified": false, - "line_number": 4279 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "85324324e21d0dfbfb5248ac92fa0f289d2e25f8", - "is_verified": false, - "line_number": 4288 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "acce4ef8d841ffa646256da3af7b79ad5cb78158", - "is_verified": false, - "line_number": 4350 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1fd0732cca36b1aa67d9bc66918e37588acadce9", - "is_verified": false, - "line_number": 4355 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "54fe04966ce0171d605b123ec4d7efeaead72899", - "is_verified": false, - "line_number": 4366 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cb039f641fdea8299522fb690505f4c23a220d91", - "is_verified": false, - "line_number": 4374 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "22e7ae9b65ade417baac61e6f0d84a54783ba759", - "is_verified": false, - "line_number": 4386 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ea11766aa27aaadd2059326e9f60764c8e85e381", - "is_verified": false, - "line_number": 4391 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8e71b7828c7c554f05dbbabddd63301b5fc56771", - "is_verified": false, - "line_number": 4397 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fea0d9c5b0c53c41e6a0a961a49cccc170847120", - "is_verified": false, - "line_number": 4402 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "774eca9b42e13c9b6fce631a97afd84e037b17b1", - "is_verified": false, - "line_number": 4407 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "478f6a38dc888e35470bd5957ef426d1ebfa5812", - "is_verified": false, - "line_number": 4413 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "223137f9e0bf60e0dcbf8ccce8ce69cd0765bc29", - "is_verified": false, - "line_number": 4418 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a23f7abc489aef65137dd9274f45c418dc0b10ca", - "is_verified": false, - "line_number": 4423 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "236b55b299a8adbd0dcfc96a1363e496c844c425", - "is_verified": false, - "line_number": 4428 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "24f733c1ae590ad1aec381ccb7178385bf7e8ce3", - "is_verified": false, - "line_number": 4437 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "47ea40b8e5df6783598df509aa331f2adaed2818", - "is_verified": false, - "line_number": 4443 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bb11554a965bdedecbf2d06eab164977b5b9cf85", - "is_verified": false, - "line_number": 4449 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2072834961e980f104f7a8f7af4d97aed97811f5", - "is_verified": false, - "line_number": 4455 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ebe2160ede628e0faeac9fe70c215cd38d28d8f6", - "is_verified": false, - "line_number": 4464 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ef1f5f202be2108cc027ff53fba8f060ab7112d5", - "is_verified": false, - "line_number": 4493 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bbf59c40414734b472547f7e4dae5597a74e2459", - "is_verified": false, - "line_number": 4504 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ce5ef15a9c7ee972830dce8a05583ac50275c674", - "is_verified": false, - "line_number": 4514 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0987509f1737d3768558ac71de7b481f4170f957", - "is_verified": false, - "line_number": 4520 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "676ada89dea8b27c7aec35c6ef64b92468725789", - "is_verified": false, - "line_number": 4529 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c332747f8870d8e199832a0f07d5a5d606ff752d", - "is_verified": false, - "line_number": 4541 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c89202b558f40d2eb5a484f75c096f8eb15f39fc", - "is_verified": false, - "line_number": 4547 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e97c3a6c0a2efb793cc6238b47facb871d6a5d47", - "is_verified": false, - "line_number": 4553 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d32245eb2fc073dabdbb460693aba2ed5f07ae3d", - "is_verified": false, - "line_number": 4558 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "456e58897460dcc7a1c822d1096d3e1ca0917a46", - "is_verified": false, - "line_number": 4563 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e87cb507cf95fce410f941f4f6d1fa154a6089e3", - "is_verified": false, - "line_number": 4571 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "32b21734f6e558872707a9a486a46507deda8307", - "is_verified": false, - "line_number": 4586 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "22206cf821d4b9973924eaea2904659d4758755d", - "is_verified": false, - "line_number": 4594 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9cb2b0347722893cde39bbe83f9df7c3c6e1b7c3", - "is_verified": false, - "line_number": 4604 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "344e37e02a35dd31cc7dc945b7fe7b2da88344c0", - "is_verified": false, - "line_number": 4609 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "afef895f68735646705f0ed9cbea650955128e2a", - "is_verified": false, - "line_number": 4619 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "31a41817127c8d2b7b304c326b05d7319934e7a6", - "is_verified": false, - "line_number": 4625 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "150852e9f1e877547306d59618a136fb535b40e3", - "is_verified": false, - "line_number": 4630 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "30f83e08246dd077642640554c47028b19712706", - "is_verified": false, - "line_number": 4635 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7d34aa04ab2275cecd3f396f230993d3ea5b2b9c", - "is_verified": false, - "line_number": 4641 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "92ca60b1a7cc9f1e08a13cf79edda566969cf2f4", - "is_verified": false, - "line_number": 4651 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0135b705dd774036325c5e18edf08e19875db710", - "is_verified": false, - "line_number": 4661 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "12ffe31fe2cdc41991054eec09b2a8e1105b126e", - "is_verified": false, - "line_number": 4669 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9c422f6dfca5f8acb3d3923f7aed45865b8e1168", - "is_verified": false, - "line_number": 4674 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2bccc39b2e611df59b39c8be90cadba46615265a", - "is_verified": false, - "line_number": 4681 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6e5cabcbedacd2c45925e5784e8d2a7b539c354b", - "is_verified": false, - "line_number": 4691 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "db09e60948b1ff036c0db2c08e97c7c51231d896", - "is_verified": false, - "line_number": 4697 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "776347d30b5c604d73753134826f0ff35e71483d", - "is_verified": false, - "line_number": 4709 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "11bc2d99c3f7858920753a3e46ddbb0d9e781e9f", - "is_verified": false, - "line_number": 4717 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "37070ba65fa07967abc2b230636d1064ed1b37af", - "is_verified": false, - "line_number": 4722 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8b7e35cac971f442ba6e9106b6f2fcfd7d3922a1", - "is_verified": false, - "line_number": 4737 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6d986a9ead20e572b700f4bedb006b1c26c0ad86", - "is_verified": false, - "line_number": 4756 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "88fa0dc05ac06d6827f14cb3135476138b70aebe", - "is_verified": false, - "line_number": 4780 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a07d364f2a8d1b1db31a8237bb34d00146bf1a8a", - "is_verified": false, - "line_number": 4794 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dc805cd06cbb416de233c9f3ec8edd03a6ab5d73", - "is_verified": false, - "line_number": 4813 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "184476d985c0d799b82544165cb4d456129f594c", - "is_verified": false, - "line_number": 4819 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "185969aa79ef4306297f6604700c1f06815701e0", - "is_verified": false, - "line_number": 4824 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c20c5f84e577e0a43d1cebcfba622fcf21dcce79", - "is_verified": false, - "line_number": 4830 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a07bf2246b3829acd53d6d19a4f832f53ea9541d", - "is_verified": false, - "line_number": 4840 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aea8f7ae787ad25f04c232d2f01917f4ff7d154c", - "is_verified": false, - "line_number": 4845 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "366aa562a1f82689f3c2de0537712e4955c10c9c", - "is_verified": false, - "line_number": 4853 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "277e32c5ba00ef90c6f76c7004fde2ecac6d2e18", - "is_verified": false, - "line_number": 4914 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6f9f90d5c3121e1d187582da18b59b8d0e2fbf2e", - "is_verified": false, - "line_number": 4922 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "371ca38e7acde2cb9e7c1a8bea0355722ff047cf", - "is_verified": false, - "line_number": 4935 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bd8ec533753a71d76052e1b0079a2e14c5bfa8d5", - "is_verified": false, - "line_number": 4944 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "95631761acb6ffe366cd95710b517dabfd6537e6", - "is_verified": false, - "line_number": 4954 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c9fef30e43f43278daa4509961eab33bef749a0", - "is_verified": false, - "line_number": 4965 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "70c01d678b92cd74a6a72f58934e1fa990d35a03", - "is_verified": false, - "line_number": 4978 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4a8328cce5786d4abf8b689de6376b1aa7d0bfa8", - "is_verified": false, - "line_number": 5079 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7b423b2551a0523b133feb3c3c32efea6e3fbd31", - "is_verified": false, - "line_number": 5202 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c3fdee28b170b0791903f61b667687d022ce8ea0", - "is_verified": false, - "line_number": 5210 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9fb24debe5e1c9dc21e5d77b76fc3644429656b9", - "is_verified": false, - "line_number": 5217 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7f1dfcc1c509ce014eee33a7e9cfd033c5d8dfd6", - "is_verified": false, - "line_number": 5271 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "74843735ef6efa4c111172f25c69f3172832f367", - "is_verified": false, - "line_number": 5334 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "92356dc4886ea0ffb51de6eb51aa9ccdd7c8bd6c", - "is_verified": false, - "line_number": 5339 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fff32f4819e70ee4d4613040d0900ce0516573ca", - "is_verified": false, - "line_number": 5345 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9027d1291ccf0dd3b908e86a64547011dde753c2", - "is_verified": false, - "line_number": 5401 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b95e69c7f4328ea641952f875c3b079a1585c9d1", - "is_verified": false, - "line_number": 5413 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6b30fe731c8444c0263b57aacbdaedb771ec01a5", - "is_verified": false, - "line_number": 5418 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f8feccd17eb37adbde0e41eb186cf32c382ca9bf", - "is_verified": false, - "line_number": 5427 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c27808d80059f49dfadb9bb5feb3037b53108f3a", - "is_verified": false, - "line_number": 5435 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2e6b02e583d82b7826b83c0e42ba2a068b0bc811", - "is_verified": false, - "line_number": 5444 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "84b1b34e9ab0f530c90695b8fe21f592b7d67d49", - "is_verified": false, - "line_number": 5450 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0fbf255cafd26b664c433d893e8f5f94ede5b3d7", - "is_verified": false, - "line_number": 5455 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d0f9d6f819b8012cd7282dfb0a9587c71ae346e8", - "is_verified": false, - "line_number": 5460 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9aa8ea71c7fe334e364961c85ff810691de5f05e", - "is_verified": false, - "line_number": 5465 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "96b299789c89faf2ca7467ca7e034c969bed15f6", - "is_verified": false, - "line_number": 5481 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5c6f1612652c11273f6dc6ed43f6d3f39a8ee5b7", - "is_verified": false, - "line_number": 5489 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2e57dc0b4869be03a51c92ea4f5ed224f3a1d964", - "is_verified": false, - "line_number": 5495 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d2306a21994eefb44d055e593477d8c194e2acab", - "is_verified": false, - "line_number": 5500 - }, - { - "type": "Secret Keyword", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2985b094dfe3d948423800b3e5f0c2c7e1c2dbf3", - "is_verified": false, - "line_number": 5503 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3be3da0f097af4bd6766946ab5400734b2893996", - "is_verified": false, - "line_number": 5509 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "02651d12f5c14c412bddbbb0e3b5f27215c34b2c", - "is_verified": false, - "line_number": 5518 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a27fe246df458a031e27048e194a55ec7bb23d35", - "is_verified": false, - "line_number": 5524 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "98eafa06e0c7e089c19e79dedf5989c3eb2f0568", - "is_verified": false, - "line_number": 5538 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d45927a031d172357e269785199a4c6e75ff5fc4", - "is_verified": false, - "line_number": 5557 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "578075d5fe7696abc90cada12555cfa373d4ae5b", - "is_verified": false, - "line_number": 5577 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bf47364c2d4ad0308ef016fe4a89f6c7dc21ef86", - "is_verified": false, - "line_number": 5583 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "596703f0a5e5733835b4ca2328c4ba1f8884efb6", - "is_verified": false, - "line_number": 5593 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "774497b0d3051e67a442882df5b6e56912f41d80", - "is_verified": false, - "line_number": 5603 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "768c25729bb5f793948b6f5cf680be00a708e1dd", - "is_verified": false, - "line_number": 5609 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "154a3081f8393ae153dd7f09fd20f2b548f85048", - "is_verified": false, - "line_number": 5628 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3e6c18abd5b90c63da0bd8b4c0d3a142e3d5a83d", - "is_verified": false, - "line_number": 5634 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "209bf9cfe9000c6851cd4f94165d30ee1cd3dca1", - "is_verified": false, - "line_number": 5642 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ceefe41e342c854f79bf28ace04e7d5dcea23a3a", - "is_verified": false, - "line_number": 5647 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "100e2d5dddf453d710f276f116d5e200cbde9a74", - "is_verified": false, - "line_number": 5655 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "41135cd24fce09855f67710faed09efce38cd9fb", - "is_verified": false, - "line_number": 5666 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1109544447e298af75035b2bbfc851610f963a65", - "is_verified": false, - "line_number": 5680 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cf09cb791688fe019284bfdc362abc41918645a5", - "is_verified": false, - "line_number": 5695 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "326aa0fbb5de3f8f869c844e7d1266db58fb80f1", - "is_verified": false, - "line_number": 5700 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "89de5e951981adef247e993c57d90f8e2a80d319", - "is_verified": false, - "line_number": 5705 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ee52c74498f69932f24449e84197169fc33857ff", - "is_verified": false, - "line_number": 5721 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6a7283084b5ad74635599d4a9fd19652649fde7e", - "is_verified": false, - "line_number": 5801 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b9509cb72e127330340c248f2e104ef2d55fbf0d", - "is_verified": false, - "line_number": 5810 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7a776bf5a4da300c1529ae11a159912fb08c6ed7", - "is_verified": false, - "line_number": 5843 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60b0881054a5f4a2c3e646cf0590c20b5ffe9416", - "is_verified": false, - "line_number": 5849 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "604848660a25de2cf20190756215ec3d960e83df", - "is_verified": false, - "line_number": 5862 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "74f9d51a4f86e615832e3136f3e98b9c62b1cde6", - "is_verified": false, - "line_number": 5870 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "66aec12e32853ec2bb60273735e4c872633143c0", - "is_verified": false, - "line_number": 5895 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ebd14b2fb6297824bd2a1b98469f1f72635dd378", - "is_verified": false, - "line_number": 5900 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "568665a36f53931a139377d292a649d19e432e10", - "is_verified": false, - "line_number": 5907 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "29c3fb067e57a9ef5582a873ebaa18edf72b2971", - "is_verified": false, - "line_number": 5913 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "575c9b4e0765ae6ab9a4f38eb1186ea361691f73", - "is_verified": false, - "line_number": 5919 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7c06334983b03ab80c24cf6584f556f1d28fa130", - "is_verified": false, - "line_number": 5924 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "12a49232584c1836a97604792a77d192ad36f6cd", - "is_verified": false, - "line_number": 5929 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c22fe71719555d5e4c508c724ee1c9a9728d8a1", - "is_verified": false, - "line_number": 5934 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9c22f8a06d2141381d255132595e95980b03f8b2", - "is_verified": false, - "line_number": 5943 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0d81ce44e2a33f18b3ef3a22b5e19d0a9f907e82", - "is_verified": false, - "line_number": 5948 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "010c74767d0258ae99de6e092f9a281ce697c651", - "is_verified": false, - "line_number": 5953 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b7f8937f7821d03786e13293e0d0482c51adbf7a", - "is_verified": false, - "line_number": 5958 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b7bc5b9add5c02a3ab8ce73f641bf76220055f86", - "is_verified": false, - "line_number": 5964 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "36772b0a4de160ad3eec470df23d92655268e759", - "is_verified": false, - "line_number": 5972 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d3cf1e2ab7e950f5b89451b5b17a47e30c94f358", - "is_verified": false, - "line_number": 5981 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "154a3ce060dd3ba22ca90c7437156c014bd47677", - "is_verified": false, - "line_number": 5990 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8f95bdf43361cffe6720264f402b5636239f6367", - "is_verified": false, - "line_number": 5995 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f89ed9527422d1b197cbc9a4515b18bf462823a3", - "is_verified": false, - "line_number": 6001 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d81e2b3377c83097e87a9ee843ceca57e572239f", - "is_verified": false, - "line_number": 6006 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8a1e78f5040981812aea53d7d3881748724e0196", - "is_verified": false, - "line_number": 6012 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "51f1d8a64e7cab12b96f79fc3dd2816968b9a8e9", - "is_verified": false, - "line_number": 6020 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2ffcda6c72be26e61f5622c6f8905d3b2d0ebca3", - "is_verified": false, - "line_number": 6025 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ff3f8501e117490c486aad0129ba6b4a0b753095", - "is_verified": false, - "line_number": 6030 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "16225dde2ec301d038a0bdbda68de4a174fbfdd0", - "is_verified": false, - "line_number": 6038 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ca7a44d6d8038dbdc4cf4860882903ab9abb9a58", - "is_verified": false, - "line_number": 6043 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "02caf1c0c7c1e839b9b3b85fa41701a1d38c679b", - "is_verified": false, - "line_number": 6049 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "80d73b6f7e87f07e3ae70ef1e692aa9569574551", - "is_verified": false, - "line_number": 6055 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f997f480531d137b87109bf8879332b9a7f27b12", - "is_verified": false, - "line_number": 6060 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5e1ef5987552ffcce5eab6ac6d4f8d20a07c5188", - "is_verified": false, - "line_number": 6065 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "38952752ebde485c02a80bff1d81ebe95664bcca", - "is_verified": false, - "line_number": 6071 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "84440f42baa2bf5bc575824d8fbb01243c2fa3bc", - "is_verified": false, - "line_number": 6076 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cf54da6337d2a87439de9f8df0d404cc517e31a9", - "is_verified": false, - "line_number": 6098 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dd24a7ed56e9f007a5b6efe8d0f8c36ced221e09", - "is_verified": false, - "line_number": 6104 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "90ac8f7e21718164b2dde0191848fcb5aec6e808", - "is_verified": false, - "line_number": 6117 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2101133e41e592b334319a5db5ca399ce071c020", - "is_verified": false, - "line_number": 6123 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "044d41ecd2dcf46abda43c2d9ca3271611952c75", - "is_verified": false, - "line_number": 6129 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b7bd2957e31afc47cf2aacf45fb1d58bbeabc540", - "is_verified": false, - "line_number": 6151 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "56400c88c97d1cf63c07905417cd5c192f6db60a", - "is_verified": false, - "line_number": 6157 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "db5ab0931d25ed2423f4a25ec3a2211f70a580e6", - "is_verified": false, - "line_number": 6175 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "11b44a1f44ba2a2832b3bca95a83cf8ba4d6dd70", - "is_verified": false, - "line_number": 6181 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "98c0e5c3c75afe39cf9b7ffc1751d7342e04f1e1", - "is_verified": false, - "line_number": 6190 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8b91666ca5db81784f6fb60297c1d0e14dc14e3a", - "is_verified": false, - "line_number": 6205 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a138c5aefc47562990ad8f9024051d842662e91d", - "is_verified": false, - "line_number": 6220 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b67bde39e971dcdc6881d9a2fe6c440384b3ddaf", - "is_verified": false, - "line_number": 6237 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b4d7f7baa20ef4df508b63b90bdf9c558cff7664", - "is_verified": false, - "line_number": 6254 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "440afbb0c8eabb43daf7816afdc2b3f03e3cf6d1", - "is_verified": false, - "line_number": 6265 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4318bad24216f32a013c1a1cf6aad5424a0c3a30", - "is_verified": false, - "line_number": 6287 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "150b60d278251f2470dd690016afe038bc1bb7f1", - "is_verified": false, - "line_number": 6297 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5856bd4cb3a23981807d6e537408344c13ffaada", - "is_verified": false, - "line_number": 6302 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "870b77771c8cd38bf0d3372a5b03dd38eeda8681", - "is_verified": false, - "line_number": 6308 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "535582d92da3a4158e592ec29868bfd8467b8bce", - "is_verified": false, - "line_number": 6318 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "21de762a2634fc1e188c9d3b78bc0a15099c51b0", - "is_verified": false, - "line_number": 6323 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7d2d3cbac5b5f9d8a8eec0a803658427968d5d14", - "is_verified": false, - "line_number": 6329 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a38b32005305ff20174b03ddb42d76d3ef9cd7cb", - "is_verified": false, - "line_number": 6344 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "23b096d9b48ed5d9a778d3db5807c5c7a2357c93", - "is_verified": false, - "line_number": 6351 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "127f92724797904fb4e6de2dfff2c71c07739612", - "is_verified": false, - "line_number": 6356 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7e49eae03cfac1c21f012fd6aa098265f24fadfa", - "is_verified": false, - "line_number": 6366 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a48a7533de837b1a75c158181730774859b77e06", - "is_verified": false, - "line_number": 6375 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f89428ff15e389c94b5d9a9be0bb43deceba3306", - "is_verified": false, - "line_number": 6383 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bc788b9febb8e95114c2e78a9d5297f80bbedb2c", - "is_verified": false, - "line_number": 6407 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3948d021f57a64547079a19a99ffb83b00f7909b", - "is_verified": false, - "line_number": 6418 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4b938cae6b629e550233995cc3b2d3d382ed8472", - "is_verified": false, - "line_number": 6424 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e78463bad038ee43cc2f4b21de2dbc95f77c84e7", - "is_verified": false, - "line_number": 6434 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60edf9357ab126e077a488706704a2f658e19087", - "is_verified": false, - "line_number": 6459 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fe80ae5fd89dc744daeefe2029052939df58ff07", - "is_verified": false, - "line_number": 6466 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3a00544189e052116033b4dc7a11fa6abe55eb11", - "is_verified": false, - "line_number": 6475 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dbc0b5540c23790b72b662b81c71cd842631bdce", - "is_verified": false, - "line_number": 6485 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ead0dafa6e89b1614c7959b021904c8d6ef90d69", - "is_verified": false, - "line_number": 6500 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2ba119e236179f10a68b7d86cf9321a0fdd0ebe6", - "is_verified": false, - "line_number": 6505 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "00d6ea44b7be30814197b45f8c412b781d953dda", - "is_verified": false, - "line_number": 6516 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8ced18953aef1de96618b493adbe5ac7734a72b3", - "is_verified": false, - "line_number": 6521 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a4ccbfa5e4b7c896f9c7a8b5e6f2b0c0251cac97", - "is_verified": false, - "line_number": 6531 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a54c4cac8552c20f9229b05a522324c20ef93122", - "is_verified": false, - "line_number": 6536 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e74f4d64c72a0cb10d8873ef97bf60c4d70eb511", - "is_verified": false, - "line_number": 6543 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4e225fefbf7dc3257f5c46a1432177846b500e71", - "is_verified": false, - "line_number": 6549 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e24a8cec071d865526b863f7dc34bd49679f7a29", - "is_verified": false, - "line_number": 6560 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "107e8f0b5f2a18512b75d616ee7c2c1a43b9a63e", - "is_verified": false, - "line_number": 6568 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e9fdc3025cd10bd8aa4508611e6b7b7a9d650a2c", - "is_verified": false, - "line_number": 6573 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bff1c8017c8c03a2b5952af4e6752dd83f5bfc87", - "is_verified": false, - "line_number": 6578 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bdff41952e92f1f32980c57d8b9181a8c35fff42", - "is_verified": false, - "line_number": 6584 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5934ae7a8477794792bca838dfeea341d95d6289", - "is_verified": false, - "line_number": 6589 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6334d58586a0e1c08715acb4d684a51eb9ec6629", - "is_verified": false, - "line_number": 6594 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7a861fd6c837564f380a21344bd0a8813df04b49", - "is_verified": false, - "line_number": 6605 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fbb28b1b999eb995fec9e44d1de4af810b9a194a", - "is_verified": false, - "line_number": 6611 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "582840ae3d98da7f63b4bedb366cedf03a7e9117", - "is_verified": false, - "line_number": 6616 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8ece95f516644cb92f31611b9d7bfc89ea1a0326", - "is_verified": false, - "line_number": 6622 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3d12813eb5c424e88ec45708bf15d4bea9434fc8", - "is_verified": false, - "line_number": 6628 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "08c10b2f6334808b58f8973fda4f0dd75cca4cfc", - "is_verified": false, - "line_number": 6633 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "eff7b0597dd7f88860c6494a2a0a6018f3198417", - "is_verified": false, - "line_number": 6638 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fe5a7880e51e23a67cff658b14529b060e051406", - "is_verified": false, - "line_number": 6643 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "da682a3e28e4b4418de3019feb225d2e8ea97e9d", - "is_verified": false, - "line_number": 6648 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2b85c9714d5df4c634945784d7d7dd26c0896b40", - "is_verified": false, - "line_number": 6653 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "af078acfe7bc52ead9db77bf9149363b78e0c668", - "is_verified": false, - "line_number": 6658 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f30db3965cfaf45c216038e7ce454d23be9c08b4", - "is_verified": false, - "line_number": 6669 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a73ff4c53097970327e57b6062a724bed19d971f", - "is_verified": false, - "line_number": 6675 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9fa718669248512c918f98c3d709ae75e2548701", - "is_verified": false, - "line_number": 6681 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f4ead8a29448966a9dbff855bc058b85735d91b0", - "is_verified": false, - "line_number": 6686 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2e1c190a76e77abe1a33d3ea5203d1c2a4418604", - "is_verified": false, - "line_number": 6698 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e2a5bcb70a9c6628a649c97800562d869afcab3c", - "is_verified": false, - "line_number": 6704 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "53edd63ca0f476068c4aeb89287a20cced5f06fc", - "is_verified": false, - "line_number": 6709 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1f2f8272a31a287b7cc600ac7e308769793a8601", - "is_verified": false, - "line_number": 6715 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bf194822fce0045563487eab1045b65211fe1b16", - "is_verified": false, - "line_number": 6720 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f9f7bf27205e67d8a666e1faca5d51b5cacf7276", - "is_verified": false, - "line_number": 6729 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9ed653cadf362f6a753dc1c5b95b963e0c66de13", - "is_verified": false, - "line_number": 6751 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c81de9bf31d61b2c5cde4638325b2bb4c703d891", - "is_verified": false, - "line_number": 6763 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "29a0c321ca8076b0f0fe772306a3677f7fa307f2", - "is_verified": false, - "line_number": 6772 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bc714a54e9a2417c96673ace958e407d2b9dc5e6", - "is_verified": false, - "line_number": 6777 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7ed5906c17ddd4e8330c8475dac722175e5e67c4", - "is_verified": false, - "line_number": 6783 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b86075857e712d4d898c682faa2995188bc8d10d", - "is_verified": false, - "line_number": 6791 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b3b2aa76fc2ebd3cd08643321fa5c7667d68ebd5", - "is_verified": false, - "line_number": 6800 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a452d42b18bfd99b82bf43cbe8bb8094c13750eb", - "is_verified": false, - "line_number": 6816 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ceea192d8f6776edc154053d8c9fae1427d7fa0d", - "is_verified": false, - "line_number": 6821 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cd662b440448baab7e093547626080b663ad57c5", - "is_verified": false, - "line_number": 6829 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b588ad9956a9c1955ba6a3e3a9f4886eb3c719b8", - "is_verified": false, - "line_number": 6835 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3a9054924f1a9ff1a4680fa1b239f6f81ba948d0", - "is_verified": false, - "line_number": 6840 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f8cd5b7823a4fade2a941a82fc76a264f2c3cc6b", - "is_verified": false, - "line_number": 6857 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "06a3dc8802aa9b4f2f48ad081cbe64482ce9f491", - "is_verified": false, - "line_number": 6865 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a3d8b6c41c53a20c6ec5ee9724b0acd209c4caec", - "is_verified": false, - "line_number": 6870 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "55028677ab6a65c8188c71b38c7a5ec4cfdb64f0", - "is_verified": false, - "line_number": 6879 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c8453f18e4aa0280d847454c9a803c12e2d14d7", - "is_verified": false, - "line_number": 6885 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3df46004e168f8d8e3422adfbf0b7c237a41f437", - "is_verified": false, - "line_number": 6890 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3087ef2a57628e69e689fb9b357876f361c468a5", - "is_verified": false, - "line_number": 6895 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6baa43613366aba02f64afa741b8718d0431d95f", - "is_verified": false, - "line_number": 6905 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8cdc0869962c4cef3aa296a6d31a45043d10ff14", - "is_verified": false, - "line_number": 6910 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "087542b797c46af486e2ad39babf0a1f5030b2e9", - "is_verified": false, - "line_number": 6915 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "58d846ede841bbec0d67a42d03426806635fee2f", - "is_verified": false, - "line_number": 6924 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "98a159a135963e5e65a546879c332b2c3942aec3", - "is_verified": false, - "line_number": 6932 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0913ac5bef0b5ee1e0619deee04bed578b2cb11a", - "is_verified": false, - "line_number": 6939 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "67619a42987e368dd3fe59582e4e13c12e7a563d", - "is_verified": false, - "line_number": 6944 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "23e42656fba130d56c20abddb94b6b7bfcad69a8", - "is_verified": false, - "line_number": 6952 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8bf57054c413acd19c7cc736655c863326871799", - "is_verified": false, - "line_number": 6957 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b9c48dec596b7146762eb5e132ee1b2fea14682c", - "is_verified": false, - "line_number": 6966 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "74a827e9b9b7a4b87b439d600bd6dd4ce587e80a", - "is_verified": false, - "line_number": 6974 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "54e96281667daaff7f25ca87bebbd022973a4973", - "is_verified": false, - "line_number": 6979 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "22bd0abeadedbe4ac89a1415cff3788f50a4dc48", - "is_verified": false, - "line_number": 7012 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ea7a290ccb099ca955bf01c7b1203e4930a1f79a", - "is_verified": false, - "line_number": 7027 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c88ecf20f9dc070ee18f0cf59f58b0025f6ec55", - "is_verified": false, - "line_number": 7035 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3594781b38f5d70bb1b747317347cf06b2a0cc01", - "is_verified": false, - "line_number": 7041 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8f337304c5ed78319bc8d7e60dd0f3753fdd0407", - "is_verified": false, - "line_number": 7051 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "68f714d1d0e643244bc11677acf3b2c6b6d98e42", - "is_verified": false, - "line_number": 7071 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1c386996454f57fad765143b1a1393b4fd15dceb", - "is_verified": false, - "line_number": 7080 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "805d9656080308c11cde7cb7f0310e12c7e60c48", - "is_verified": false, - "line_number": 7089 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "316bf5ed09ed2d2511c54a3e60e047e26550c82c", - "is_verified": false, - "line_number": 7104 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3e536139add3f70bf34712d57cf490dc9c631553", - "is_verified": false, - "line_number": 7113 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "869a40b729083c41268e4ff73da71ad253b63821", - "is_verified": false, - "line_number": 7119 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "eea749e60b715d9845ebde466ee96e4f5e4260ee", - "is_verified": false, - "line_number": 7137 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "469497944f4f96c71a1df68eaf73329ff4189333", - "is_verified": false, - "line_number": 7145 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "da30eb12fff904c817eacec74cbf529040ef4d92", - "is_verified": false, - "line_number": 7151 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "26db7c7113ec090ced56ff936434c6740495ae06", - "is_verified": false, - "line_number": 7205 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2e65c846d4cfbe21c47c45154da1873c4b566e11", - "is_verified": false, - "line_number": 7210 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cb7b7ea2ef8bde14f915deb7c2a9e00ceeaf987b", - "is_verified": false, - "line_number": 7215 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "07f8f2e379c397e8fca455ad5c89827f9bdbcb89", - "is_verified": false, - "line_number": 7228 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "65039359a536261c7757a150eb9bc7f54952b522", - "is_verified": false, - "line_number": 7236 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f99039bf6e12ab1c145a15cb3c0dc95854023457", - "is_verified": false, - "line_number": 7242 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fe79b2cb4440fc9ea6dda77da48cdabcc3c5041e", - "is_verified": false, - "line_number": 7247 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cfec1f08e8eb43448d8da9de91e64ea77d8b877d", - "is_verified": false, - "line_number": 7269 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b7c6c9e6950da52c8ebb7501e194f2d9a26f4736", - "is_verified": false, - "line_number": 7275 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8ece0f01da9189bae69a60da116040400bbc10e5", - "is_verified": false, - "line_number": 7285 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d8804d9cc71f687821d608a8c1c9f851df168128", - "is_verified": false, - "line_number": 7290 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5ca4637051702c03a7319bdd7051d034246b75db", - "is_verified": false, - "line_number": 7296 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "633cf9adaae15cf432ba82a10c555fa3313c1ae7", - "is_verified": false, - "line_number": 7302 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "14f7b9701b0db90fc803d73c82e43a4d7f457065", - "is_verified": false, - "line_number": 7330 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b0819ab93327fea1db86da7163d82c41b9f71508", - "is_verified": false, - "line_number": 7336 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "11337bf5b474f11996fb0c53504a4b5648c6b8b9", - "is_verified": false, - "line_number": 7342 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0d8b1f08076e3a6f1d51c32053a5b10fbc65a88a", - "is_verified": false, - "line_number": 7348 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "32fb1273a308d8f0058b6b9342509f3f0ceb1f90", - "is_verified": false, - "line_number": 7357 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e6ec6fee466f0903de2a9307687cfb4a36312ceb", - "is_verified": false, - "line_number": 7365 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a2bdb0039be1aefe63ddffa530d2c19b98d92cd6", - "is_verified": false, - "line_number": 7370 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3b4efa57df7ee9f211d0ea35a43dd07389f9169a", - "is_verified": false, - "line_number": 7390 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "99059b018c0d4fc5227189e896000ba61aa5b8f6", - "is_verified": false, - "line_number": 7401 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f4f0bf9d8ba1fc4c8339c697ddce1e801878f8a7", - "is_verified": false, - "line_number": 7406 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "668695cd852a7b658e9a199efd121b6d7d7856d8", - "is_verified": false, - "line_number": 7411 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c28a6f4a84f283713e724af9c671fe952afc86d1", - "is_verified": false, - "line_number": 7416 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "473c22b1ac7549572e53bbdb63c4fec59259cb8d", - "is_verified": false, - "line_number": 7425 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b4a2e99c4e65b47c41cdaa99d350e8ef358a3df8", - "is_verified": false, - "line_number": 7450 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9918a6b1e037c189e04ac63502b39cc614834711", - "is_verified": false, - "line_number": 7476 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "42f58da843c1c362da200d30e346515e81487f7d", - "is_verified": false, - "line_number": 7485 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c5196f2e9919072b6ff0a28c981a37f0b6276c6e", - "is_verified": false, - "line_number": 7499 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c6e6dc3fc25fb520e69c25ecad66896a3fc1b52c", - "is_verified": false, - "line_number": 7517 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0a68e003e521d8b996e1c07b3b5b2664de31fa44", - "is_verified": false, - "line_number": 7526 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3f0b72d98b2c684d59df13315d7191214e3fd348", - "is_verified": false, - "line_number": 7532 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "19b6dfeee14696a5f7cf3676642203857397ec24", - "is_verified": false, - "line_number": 7540 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "70e5dc62b69e7a833815309451de32ee47db9f80", - "is_verified": false, - "line_number": 7545 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "afbcb86a5cd5d81a01edf9a8969a14e55102d72b", - "is_verified": false, - "line_number": 7570 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "075e04d48429f7795cbda58804cdc46ce4212852", - "is_verified": false, - "line_number": 7581 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "08098336d850a32e126a5364092cbebdf1dfc634", - "is_verified": false, - "line_number": 7590 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a250d501ec91bda6c44ccf0e58d5686dcf338026", - "is_verified": false, - "line_number": 7595 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e8052d6a30f5c788cee736b595d620d412596dc8", - "is_verified": false, - "line_number": 7709 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "507daaba94790845911786926ea090c3d828a745", - "is_verified": false, - "line_number": 7720 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8ed55e3d8fc9f91240c608291ccb4cf1661e9c31", - "is_verified": false, - "line_number": 7726 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b7ab61c2a1308a1440f2dfc434722793f4ec29d7", - "is_verified": false, - "line_number": 7745 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "75a3c0b9934bd460ff7af9763edb25d749ab7b4e", - "is_verified": false, - "line_number": 7759 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b9a549991528b1f793bc9b74a0a43af994f93dab", - "is_verified": false, - "line_number": 7764 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e921c21273bf03fb6975fa0dfff7b073fe90a123", - "is_verified": false, - "line_number": 7769 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2390b9fdb4db8fda46e19a9d436d66b54ac5835d", - "is_verified": false, - "line_number": 7775 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "563cc740e3f8f3749478a07df90ec463fd703f82", - "is_verified": false, - "line_number": 7780 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5d713239ddaa33b9c58100751a56537c7430d53d", - "is_verified": false, - "line_number": 7785 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "654fc8c7b786aead53e3209b820a651a7eccc894", - "is_verified": false, - "line_number": 7796 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "baac57cb314beab87420d1da6906a1d2377c7d73", - "is_verified": false, - "line_number": 7805 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c4fcedad5a999ed0ad1dfb259130e17137d7f045", - "is_verified": false, - "line_number": 7821 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "064b874f13a3779d7227de426e2646eaaf7d1b39", - "is_verified": false, - "line_number": 7829 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "472e4790b0bad0223d8b52621da28b9e7df3a64a", - "is_verified": false, - "line_number": 7847 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cb544764b14954883775a20c1bb7a0bdfc209b2c", - "is_verified": false, - "line_number": 7855 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e7257a88812c81217cb9df30808ae0f10cf22b86", - "is_verified": false, - "line_number": 7877 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b36066cc17f5a831b67e8ff93c244139cda2f205", - "is_verified": false, - "line_number": 7882 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e10a4f9909eff90a35dbcd270d5eac2a68503d7f", - "is_verified": false, - "line_number": 7891 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "462295c76aa0840e59f551856aeaa244a32af47d", - "is_verified": false, - "line_number": 7896 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4e8e30a0a1d36c7c7625051270fc305b0c106023", - "is_verified": false, - "line_number": 7905 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d0a953de593a0a7b26b925a6476d8382cd31cb0e", - "is_verified": false, - "line_number": 7910 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b2e846b4c4f9b16738215a08bb6838b125977d28", - "is_verified": false, - "line_number": 7915 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b1655f0436ed02542ddf34e65e9897e59633b752", - "is_verified": false, - "line_number": 7923 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9887efc5c991b95f47d51d96bd0f2a6a7a4bddf1", - "is_verified": false, - "line_number": 7931 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1e2ab7a2fd9b6afcbe08afcb9dc652b76cf367d8", - "is_verified": false, - "line_number": 7940 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c9a0f70271023a1b82d44b6544c32f834098c007", - "is_verified": false, - "line_number": 7948 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0155d8e17920903b039b7712cd43e882b5072b2b", - "is_verified": false, - "line_number": 7953 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a2ae96c19810f942eaf1c4c1611b24427bb53171", - "is_verified": false, - "line_number": 7969 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5206be994b8db0c93be9c0c04c72adde16c75498", - "is_verified": false, - "line_number": 7987 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b26fc67a05bcebf95b6074ebbc79c4ef35745905", - "is_verified": false, - "line_number": 8014 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0bc64fdf91da2c97878e7df4ca19b85857862bf5", - "is_verified": false, - "line_number": 8037 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "723e8ea7636d64c2b9512bb189da363fcda6dd33", - "is_verified": false, - "line_number": 8050 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "139323d71483de0860981200fb39673681ab2ef2", - "is_verified": false, - "line_number": 8062 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d9efbdf71c548a000ac469ddb800a566a21d9824", - "is_verified": false, - "line_number": 8072 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a4ca125c83f4f250d0b6508bf2b97d5b5252c203", - "is_verified": false, - "line_number": 8085 - }, - { - "type": "Secret Keyword", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60ba4b2daa4ed4d070fec06687e249e0e6f9ee45", - "is_verified": false, - "line_number": 8088 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c651d6ac18f7e9a1f94e1bc2f68379cc1851432", - "is_verified": false, - "line_number": 8091 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ae745d719f97b3ddb9791348b1f29ff8208c0c5c", - "is_verified": false, - "line_number": 8097 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d85390e7a243ace5f4483b85a2dfc6330b4f085e", - "is_verified": false, - "line_number": 8102 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "533573708ed3eabce514432cd26d532218222659", - "is_verified": false, - "line_number": 8112 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "891e23c02f7af11c912b47e84dba9ebc2a810571", - "is_verified": false, - "line_number": 8117 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "61ff5c8a702d8ffe28063c06487a3a5a0db2ed70", - "is_verified": false, - "line_number": 8122 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "08266a0b438e97fe47135400e8897f931d99ad61", - "is_verified": false, - "line_number": 8128 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b72a53c8bebd6540eeffeba5b0c28965bbb2a664", - "is_verified": false, - "line_number": 8133 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b3535a5defc70dbd440e104c8ed5aac37b8a6ca3", - "is_verified": false, - "line_number": 8138 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "45fae1a0e2d1a7f2db463c174b2a72424961ebe2", - "is_verified": false, - "line_number": 8145 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "97cbb7fbdfe498c80489e26bcdc78fce5db9b258", - "is_verified": false, - "line_number": 8151 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7fb9e723ffe44d8792012771f62bcda1f1386edf", - "is_verified": false, - "line_number": 8156 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a333e405c05cedb7d37ba5a38ad44f4d236fe04c", - "is_verified": false, - "line_number": 8162 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "76ea0f5f6a69deafe4e6b7be8d8175ebd6c648e1", - "is_verified": false, - "line_number": 8171 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "82da7726f170885a2dc1da0b5c4b6817555ea5a6", - "is_verified": false, - "line_number": 8219 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0f3a046707792f62d75b576a74c72e4145c3edf4", - "is_verified": false, - "line_number": 8230 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0ebcf977365da4e7747e690d18e054f9e3ea4d3e", - "is_verified": false, - "line_number": 8252 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e0b570bafe751377f9ce22a39c0515e4185b457d", - "is_verified": false, - "line_number": 8267 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9e88c985e209e9a4df23d8647c21c5775d090d38", - "is_verified": false, - "line_number": 8290 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7dd2fe9a33ffdf389ded0c661b9407951a91ff74", - "is_verified": false, - "line_number": 8304 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f8c7941bd484f4d552d3b39f61ba077d665787d2", - "is_verified": false, - "line_number": 8324 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "401f90e6afa890c5ee44071351e4a149e7c1f5e0", - "is_verified": false, - "line_number": 8354 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "951e0de5f06b3ccf1734448092ee4fd314881a89", - "is_verified": false, - "line_number": 8368 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1addd61f68d977408128e530959437821a6d8b66", - "is_verified": false, - "line_number": 8395 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "93b63c9dfb8292123e90b67271acbfd7ba7b60b2", - "is_verified": false, - "line_number": 8404 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60a02a307fd4794b4c7c3288d48f36b327ec1b3a", - "is_verified": false, - "line_number": 8421 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "29f79b77802802c5ae2d3c2acb9179280de37914", - "is_verified": false, - "line_number": 8451 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "94d912ac68576304f7697e5d8f4b0685db871cf0", - "is_verified": false, - "line_number": 8463 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aee8d2172cdf295b9fa9c0df972661b28157501c", - "is_verified": false, - "line_number": 8479 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b44749dabf2780274e1d52051bb77c9dd8050afd", - "is_verified": false, - "line_number": 8498 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5bed35e8b0b1a4811d423fc7c248736bcbded8e0", - "is_verified": false, - "line_number": 8537 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "200fd400fd5ee26402a28c2b98570f48b19e7241", - "is_verified": false, - "line_number": 8547 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d40bc1ff2069f9b2f9c062ac7c0357b22727f596", - "is_verified": false, - "line_number": 8553 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9ef1d4393a719765b669c9fd340ec134e787d35c", - "is_verified": false, - "line_number": 8562 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c23b0650f6cba3e66097d40e2f3fc3e62c5ab213", - "is_verified": false, - "line_number": 8567 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bc98c415b1c6ee93adf8e97a4a536b6342337c19", - "is_verified": false, - "line_number": 8572 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fd29cfee64d25ea7b84a5c60ac7417b7be067d03", - "is_verified": false, - "line_number": 8577 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ea79104b9756fbd12754fc0513159a2f00360170", - "is_verified": false, - "line_number": 8586 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "534df9d1fd6552504ac8bfeca1563e8fde9a7721", - "is_verified": false, - "line_number": 8596 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5a6baaacb03a030567b857cb8cfe440407e6385e", - "is_verified": false, - "line_number": 8616 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0a852241f61fbda0c5d91c5e503375dbfe8db4af", - "is_verified": false, - "line_number": 8625 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1e6749494b2c1ad14f8be0d004a368972811955f", - "is_verified": false, - "line_number": 8709 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c835906d493452b25b05d790c5253d807440c034", - "is_verified": false, - "line_number": 8720 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "47709a15a1b02a87f65dfcd5f3e78e0d2206c95f", - "is_verified": false, - "line_number": 8725 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "89a00b34b62c2d480fbff2e751d47226fa5f24cc", - "is_verified": false, - "line_number": 8734 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7a87fb248397359e9c6ca6e46f39805789059102", - "is_verified": false, - "line_number": 8757 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c31993aa488e3a53f61c94e865589f213a76f679", - "is_verified": false, - "line_number": 8762 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "51f38b23af543da8b637a3bd62f5fb2c460e3b3d", - "is_verified": false, - "line_number": 8767 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a215faa77ef3f0cca4574804353e1df8298bdd49", - "is_verified": false, - "line_number": 8772 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8287678ab8009ae16b02930c9e260d1f28578fbe", - "is_verified": false, - "line_number": 8781 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d4c050e6914eb68a5c657fb8bb09f6ac5eae1e86", - "is_verified": false, - "line_number": 8786 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "773059609b4366873bd8442db06662c2e66dafff", - "is_verified": false, - "line_number": 8797 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "154087483597a57569ddd46f9ba3e12caddf3837", - "is_verified": false, - "line_number": 8808 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "61f78d7d7d77d98b7067956a2b77d325e5691e56", - "is_verified": false, - "line_number": 8818 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "371a58ef09d35332fb0950695d84a5bacb91da6c", - "is_verified": false, - "line_number": 8827 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "284b799b24d1004eeb24c0394ff1e70c1bcc439f", - "is_verified": false, - "line_number": 8838 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "099f8bc21c1d4d1be208201cfa44b4158ec3daf2", - "is_verified": false, - "line_number": 8850 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "37c4c04d623205bcbee0449692ff277ea0779bf6", - "is_verified": false, - "line_number": 8855 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3fde7f63a5e3531aea4bff9933a60f18fd563151", - "is_verified": false, - "line_number": 8861 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d184240f129e3126b048d50e0c8e55a03a2f043d", - "is_verified": false, - "line_number": 8869 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "81e3ae85941b33d79ef6f1d57849c2b7233c8317", - "is_verified": false, - "line_number": 8877 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d0d1489ec3f83ebbbdaa6449a791d0359485f8be", - "is_verified": false, - "line_number": 8882 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "301c46b5d2578bc92fe6f5d148d167c27f452a16", - "is_verified": false, - "line_number": 8891 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "55c8e7f18be62e56d4ba2ded0d2e0d62e2dd5a44", - "is_verified": false, - "line_number": 8922 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "148c2cea3e0eb3fba5be8ca89ee193d1c8bf6f7d", - "is_verified": false, - "line_number": 8928 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0d20fcd767651e8ca0d8a0c2740253b3f5e8949d", - "is_verified": false, - "line_number": 8949 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f7f85d9f7c87f1e576dcaf4cf50f35728f9a3265", - "is_verified": false, - "line_number": 8974 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e4ef0b796d734fd09c7944fbd4090897cfc6dc81", - "is_verified": false, - "line_number": 9013 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "03bd7701eb5c5392da2dbd56898cc6e953fc633d", - "is_verified": false, - "line_number": 9024 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "42ebd78fb439ca877b78cdb91475a135102957c8", - "is_verified": false, - "line_number": 9032 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "37ca972d6abab0d2804e63061e1da24fefe0fdd5", - "is_verified": false, - "line_number": 9037 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9f1dca61504925ab07f3968a070bd31d0f670ccd", - "is_verified": false, - "line_number": 9047 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bea46b2b95add66abfaccce2da1e5de886694fb5", - "is_verified": false, - "line_number": 9057 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7686335cafd147d2e37d7fac339ac984de7b3ba6", - "is_verified": false, - "line_number": 9062 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "34bb77b8a0b8fdb1787d549b64895ee00f52184a", - "is_verified": false, - "line_number": 9070 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f241e44dd1421cd26ac78332db57217a61f50c94", - "is_verified": false, - "line_number": 9080 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "584f97994f6693c2196c75327da4bf500b93f26a", - "is_verified": false, - "line_number": 9086 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0031212f06797472d12d810253a942758a52d158", - "is_verified": false, - "line_number": 9096 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a82baa1dcf802298ce04cd3fe77d8dc7d3b50a60", - "is_verified": false, - "line_number": 9106 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fbee360149f658d5bc293d89d5b030753515b807", - "is_verified": false, - "line_number": 9112 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ed0e7c56587bad610035910c709b24f97dcfd989", - "is_verified": false, - "line_number": 9123 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bff577a686daaea84b44449fc5889065ad1b2974", - "is_verified": false, - "line_number": 9142 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "61fe73786601f140670a91202612ceb7c5baa2d6", - "is_verified": false, - "line_number": 9147 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "19e6553a27474d64622bfc932f6b65becc7e8799", - "is_verified": false, - "line_number": 9155 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "76d227a63faa69311aabf78b4fe8cd131baa0143", - "is_verified": false, - "line_number": 9161 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f6368525e9e22577efc8d8b737794e845958ba92", - "is_verified": false, - "line_number": 9170 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1508bbaf29927b5348d4df62823dab122a0d3b48", - "is_verified": false, - "line_number": 9175 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "74163d2f71a313c1dd5f61f673669f61b6d810f1", - "is_verified": false, - "line_number": 9180 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "14411db0799882e659ef17a4954a96716744a934", - "is_verified": false, - "line_number": 9241 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "04e290974015de8c28d805c80510ccf9b4181ff3", - "is_verified": false, - "line_number": 9246 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "20293db693d803ae5b56c8a0d25119d571e5fb21", - "is_verified": false, - "line_number": 9252 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "da657fa18cc4461f7d17f9e2d8273128c08c787c", - "is_verified": false, - "line_number": 9257 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "49e05eb75fd04d8f44cf235d4e8eddc30a2b93e5", - "is_verified": false, - "line_number": 9262 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5c270f653b2fcd5b7c700b53f8543df4147a4aba", - "is_verified": false, - "line_number": 9297 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aa8ea120ddc5aaa27cb02e0b04ac1c53b249a724", - "is_verified": false, - "line_number": 9302 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "095a24fb2c9d18715c04b09581158ac7fa78a535", - "is_verified": false, - "line_number": 9309 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "83122f5c29fecbf5b12aec2247b00a08ab0f2f95", - "is_verified": false, - "line_number": 9320 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9e26987c9548d5432879d658bd4124404269e7f9", - "is_verified": false, - "line_number": 9334 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b3e00452fd69737cc747d0661fa3b3949a4a0805", - "is_verified": false, - "line_number": 9343 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6e22f3ee54a6729d0ab5aa692a26551beca43f3d", - "is_verified": false, - "line_number": 9354 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "af2ceb518ddc689b0e2a03ffebb64d4499817c17", - "is_verified": false, - "line_number": 9359 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3b7990b0f82bc9bc6c4ec02744f9c02e76aac827", - "is_verified": false, - "line_number": 9364 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9072ebcbad57a1ae4256c5ae37c1e7c7ae5325de", - "is_verified": false, - "line_number": 9373 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1cc106cd0bdc3045bb58fde3bb4a47174611c8e5", - "is_verified": false, - "line_number": 9379 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fcf56df838316b9be4013f8954fd3aff8f916599", - "is_verified": false, - "line_number": 9384 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c8d26bd101c1bb56b67107b13bf5eff3f037f566", - "is_verified": false, - "line_number": 9389 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c97af7c53066197c22a6c364af841457a76a3ea", - "is_verified": false, - "line_number": 9397 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "52346f6585c029390846cae2f153417bca403c17", - "is_verified": false, - "line_number": 9412 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7257dcc58ab121ee757522326845db2b30057250", - "is_verified": false, - "line_number": 9435 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "de7f1678b5103349cf776d83d0f5e6e57d8dfb26", - "is_verified": false, - "line_number": 9441 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "db6d0bc06a9f599f5d3fd6fdc76de8aa362215ac", - "is_verified": false, - "line_number": 9447 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5b141296cb882792672f094f96c33227744f989c", - "is_verified": false, - "line_number": 9456 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1f1d2e47519d00d513dc333505e52fcf597d0cf5", - "is_verified": false, - "line_number": 9461 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b4b6745fcfb6d87458d1951c774c77c70c27b577", - "is_verified": false, - "line_number": 9471 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "15866118c86746259c76e76d5a786a1e4de3d41e", - "is_verified": false, - "line_number": 9481 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8db956011899a12e5f3cd3b6451ca77c5896f94d", - "is_verified": false, - "line_number": 9492 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "75b9dc01be78c0105fc8de0438c05ca3a4fe8329", - "is_verified": false, - "line_number": 9497 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ce127e553fda0ece04a40c6050c8292fa92b4cc3", - "is_verified": false, - "line_number": 9506 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8933ed02cc45ee972f6602692b65426815f2a1c7", - "is_verified": false, - "line_number": 9540 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "29f6e4c68841a01708992cdd802e56ebeb55e5bb", - "is_verified": false, - "line_number": 9546 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4e6c84d648b89cf86ee5343472e2399ccf3b0446", - "is_verified": false, - "line_number": 9554 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c59aac9ab2704f627d29c762e716ba84b15be3f1", - "is_verified": false, - "line_number": 9569 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "da8a254edbe916fcee500b793e949b42f38b6bda", - "is_verified": false, - "line_number": 9585 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ecd031fd59df9489975ba828cf8dd6b71c6d061b", - "is_verified": false, - "line_number": 9590 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c332c9f311591748fdff7e05b346443d8ce6f4d", - "is_verified": false, - "line_number": 9595 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "20249a3c96028e5ad19143d86ec5d2ee233935ed", - "is_verified": false, - "line_number": 9600 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5e4aac0b4a18d4f5f759f87b2f142eb19a823548", - "is_verified": false, - "line_number": 9605 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a1326870a52f6eb837f1ccad730e8a3c55ffe91e", - "is_verified": false, - "line_number": 9610 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3f56d9812533ec9d78c1ebd9f380be72fbf5ca72", - "is_verified": false, - "line_number": 9618 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e96f510c45822e49b9a068923dc344e9dc152648", - "is_verified": false, - "line_number": 9627 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d3cedc8271f9a3793779f05c64a6b9af66ae1cd7", - "is_verified": false, - "line_number": 9635 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d7335c691ca27dd1927cb2b4fdf28a2bb0a661b7", - "is_verified": false, - "line_number": 9640 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "777497f82a9e93b8ee284f7f63dc432a7fa38006", - "is_verified": false, - "line_number": 9650 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "47198cc0c698c9de241d04cc1a76334925cb24e1", - "is_verified": false, - "line_number": 9665 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5288998d82dc37c1552a729ecd1fb1c5111f3058", - "is_verified": false, - "line_number": 9671 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "46de3c4e559779e8d1de6c10cf1561b0ab835917", - "is_verified": false, - "line_number": 9681 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c59e45a594eeb7582be277c7053f239d2fa7d4ad", - "is_verified": false, - "line_number": 9690 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f4ed5c5e9e31cc69237dac6d6f568fee2da2134a", - "is_verified": false, - "line_number": 9699 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e5ed9ce155951d19b999967650a1fdcb0db391a2", - "is_verified": false, - "line_number": 9708 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "1be172b28420494a97b5bd6dc5d20d9b54d52047", - "is_verified": false, - "line_number": 9717 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a126f2a0ec1fc0aec4c6eddb11e61ad4403141fa", - "is_verified": false, - "line_number": 9725 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8c14ca426e18afd6aedb33f1e4af45d10ff480c9", - "is_verified": false, - "line_number": 9733 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ff6158d91155ecdc977baa1b5b216a02af9c165c", - "is_verified": false, - "line_number": 9739 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "45ef2cb8b535b5eb9e0fde3e3be8119b3a8d0cc8", - "is_verified": false, - "line_number": 9744 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0651ba881a4f42c0d996ea3e8255ba479305a456", - "is_verified": false, - "line_number": 9749 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9ab233aad7da9b0be4d175ee471a9db4c3f1684b", - "is_verified": false, - "line_number": 9754 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3dfc957fef34457fe0116789bd8e23b3a18e4770", - "is_verified": false, - "line_number": 9766 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "66f91534ae3d1069b8b6bbf37854db7466ca9bf6", - "is_verified": false, - "line_number": 9776 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0ead4b04a5430f056f1a231c101ed9b7aa7d4fe7", - "is_verified": false, - "line_number": 9785 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f3d8d6e0ff05913706b6e1a6505bc9597be8a826", - "is_verified": false, - "line_number": 9790 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "147c894c648860e06ad2f8b34ef03134c6f09112", - "is_verified": false, - "line_number": 9798 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "337c749e361b258aa221b5c35d70d90189c727d7", - "is_verified": false, - "line_number": 9804 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60e22834071c5f3f31e8584a22d1413f9fec66e4", - "is_verified": false, - "line_number": 9847 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "ac89a1c44566548af25a362310fd0f5520667be0", - "is_verified": false, - "line_number": 9853 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c531fd844c5cf426f0c6ad4672713e17a4909ed1", - "is_verified": false, - "line_number": 9864 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "dbee1beb29275ad50ef0a68067ca144985beca2c", - "is_verified": false, - "line_number": 9869 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "af2123522a57bc58ab44b5cfa335c037d6644f5d", - "is_verified": false, - "line_number": 9875 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "df9b9526f4a11eff2efce2b21370d1e487b8c519", - "is_verified": false, - "line_number": 9889 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2bf8a58f01e6abf01bcf097acf7903fe8dede2b8", - "is_verified": false, - "line_number": 9897 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "36a41bfa336a40f390233bcb3edba75b423c0ac5", - "is_verified": false, - "line_number": 9908 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "88478ea9148d22c35a5433f11c4cc8d1411caa75", - "is_verified": false, - "line_number": 9917 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c071c6ed54a3a78342af5c439aa522c63132180", - "is_verified": false, - "line_number": 9925 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b0cb4b5554183f2c7bc1ca25d902db5769798a7a", - "is_verified": false, - "line_number": 9933 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8665901d1a739f304b4aac83ad3ab7d3a95446da", - "is_verified": false, - "line_number": 9947 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "80ea343b54fbe5adb9f9f59d8cf4e59c82e4fdbb", - "is_verified": false, - "line_number": 9952 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "109c59529e7d82c500e9270623c35f7f2dbb35df", - "is_verified": false, - "line_number": 9984 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "623e2a74289a9b86e19cd76dc57676b093a40e0b", - "is_verified": false, - "line_number": 9989 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "df911743057e957d166c09e0746e85bf596195d6", - "is_verified": false, - "line_number": 10030 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7f4f702146875e52e4b5f124b3f409a740cb0871", - "is_verified": false, - "line_number": 10074 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e8efe21ab6170c1bf85baea428e3f511f708bbca", - "is_verified": false, - "line_number": 10083 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2719c6c225d5bf3f6a9c51b0cfe93139144cfc53", - "is_verified": false, - "line_number": 10094 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8c4172c0c2c532d365c5d4a073108091382f1dbc", - "is_verified": false, - "line_number": 10103 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "18469023a89dd192b5275d8b955c9fd2202e0c03", - "is_verified": false, - "line_number": 10108 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0d3ce7468071b4e48ba9cd014ade7037dc57ef41", - "is_verified": false, - "line_number": 10116 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "eb9c0784a5d7e3491ee4d1ae2e84a6f96b1935a6", - "is_verified": false, - "line_number": 10121 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "cf8769a85052b2fe5947cc828d2c35305e3cc2d4", - "is_verified": false, - "line_number": 10130 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e48841ceb23f37c6285b544a6061701cffd33739", - "is_verified": false, - "line_number": 10136 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "955d2d24c472b4eb0b4488f935a0f65e38001df8", - "is_verified": false, - "line_number": 10141 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "50607eb0d414d16617c90a7c615b98e1291f2c9a", - "is_verified": false, - "line_number": 10150 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d9777d0c95f98a54ace74a709c1a3cd17016fc5f", - "is_verified": false, - "line_number": 10155 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "aab32923ac559e5630b4c42a7b6f7af671aa6224", - "is_verified": false, - "line_number": 10163 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2f01cbdb950c3d79bbeaaf9a674d81c84794aa36", - "is_verified": false, - "line_number": 10168 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6c7e20dc13641cb89ba7b524537f3881ff646e20", - "is_verified": false, - "line_number": 10188 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "99dd278a233148eaf159f0062fa26f63fa3205ab", - "is_verified": false, - "line_number": 10194 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d77ed2993e73b86fa8d1ac3ddc7f5849bdee137d", - "is_verified": false, - "line_number": 10202 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d52512731e222109568090fb46fc7cd43890a312", - "is_verified": false, - "line_number": 10212 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "42e05c82cd06a9ed1d15e0f472c2efc4b3254cae", - "is_verified": false, - "line_number": 10217 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "5782d0f39536b22f2c6aa29d3b815a57f43e4800", - "is_verified": false, - "line_number": 10234 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0e3960e3b1aa9fbe97ad7995945f56e75f91fb15", - "is_verified": false, - "line_number": 10241 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "8c580ebc8aabd364ebf8f6ed10c44658ad59a420", - "is_verified": false, - "line_number": 10251 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4c583f3dacc9a0e63a47f5bb7e01c47076bec7fc", - "is_verified": false, - "line_number": 10257 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7fbf450bf4ee54f013454f70af3a9743c0909f54", - "is_verified": false, - "line_number": 10274 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "968a8422b7fe65d7567ba200d3fd9f3c9f44d87a", - "is_verified": false, - "line_number": 10279 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bc2b9d08e5107359894fd5da700019969fb09866", - "is_verified": false, - "line_number": 10291 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e2a413758bb7dc1c283b753f0fb319276f34e254", - "is_verified": false, - "line_number": 10312 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "a152a4d88be6d4c3cfd078442ab6afaa08f583dc", - "is_verified": false, - "line_number": 10317 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "192d11797f4f8efeea8ed66f874933380579a126", - "is_verified": false, - "line_number": 10326 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "7eeb3811a007699ca77eff6b7dfec9f629b516ee", - "is_verified": false, - "line_number": 10331 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2021eda946b15f55a5739156272f00472768232b", - "is_verified": false, - "line_number": 10342 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "df8e0babfad52a541f6e470cf3a143402c2c2a1e", - "is_verified": false, - "line_number": 10354 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d4a9bb5ea90423012244c4784a566fb186f190bf", - "is_verified": false, - "line_number": 10364 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9e897caf5658aea914e1034f46663cadb5a76348", - "is_verified": false, - "line_number": 10395 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "fb0efd2d61c113c008a898abd9b1c9630705b752", - "is_verified": false, - "line_number": 10405 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "28ce4be9b6eb6856c4bf942b9951334e96a6c55a", - "is_verified": false, - "line_number": 10413 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "725b9654d64cccc77f294d0ea0a09bbc11bd46bd", - "is_verified": false, - "line_number": 10418 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c7ef667ffb0d5ae66e7f643a483c22c0cdc1e25", - "is_verified": false, - "line_number": 10426 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "58e1cc41d9f15389145d4bac327dc8e049cf9831", - "is_verified": false, - "line_number": 10434 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3c42803105ef65349dde4474b0d4de15ce00db54", - "is_verified": false, - "line_number": 10485 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6a06fcab75226b02d9c0b37db785b301712291b2", - "is_verified": false, - "line_number": 10550 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "392144989b90995fad5bde8c9f94dd3001913d0c", - "is_verified": false, - "line_number": 10556 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "f2da38b66826d5df8c4dedd11f1698a44efda21c", - "is_verified": false, - "line_number": 10562 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "eca5fc6e4f5f895143d3fcedefc42dfe6e79f918", - "is_verified": false, - "line_number": 10608 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "48ba3044f3b16375156d71cbfc48db1fea40a69b", - "is_verified": false, - "line_number": 10613 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "3744d756235c33e86a82259a8d3b8dd6569789fc", - "is_verified": false, - "line_number": 10624 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "44d08f1786c6470eb957548e8ba4170bb0d66c6f", - "is_verified": false, - "line_number": 10629 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "acbc4e0d0156bd10ae11961110589940d971dc1b", - "is_verified": false, - "line_number": 10635 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "b8f971fac39e4aea30b55aa61061d102cc8a1d9e", - "is_verified": false, - "line_number": 10644 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "684a87001bd7fd97b2065db52e2138596db2fc3a", - "is_verified": false, - "line_number": 10651 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "d848c76e10ff33cf6727a23dc9028f3fc1978bb6", - "is_verified": false, - "line_number": 10657 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "04a07353500a4e0d7cb83c3cea002338d789e041", - "is_verified": false, - "line_number": 10663 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "845000390934a56f92bf868e699920b42663cbbe", - "is_verified": false, - "line_number": 10668 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "45349b85a1272f7bddf0648d50473d3d6d3de63a", - "is_verified": false, - "line_number": 10673 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "c0665d268ee6985b4ce98c67b9c6c7502af11a25", - "is_verified": false, - "line_number": 10678 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "4ff18905b83280512ef37332280dc2c71540e189", - "is_verified": false, - "line_number": 10683 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "9fbbdc957c5853870c3494f28abc9214e78df2ff", - "is_verified": false, - "line_number": 10690 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "2e2f318d68a1eda1299228bc37e598ff282bd7b5", - "is_verified": false, - "line_number": 10699 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "6f67b0fd13f6feb5f6132a68f8c7f59b6bdcf97e", - "is_verified": false, - "line_number": 10718 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "47f61db9968d9147373f9919fb2d39f044af96d4", - "is_verified": false, - "line_number": 10751 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e8d17f576237010b9617b4519f1ba6ab7bab5da8", - "is_verified": false, - "line_number": 10761 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "0ad40d6a99fdd6f026cd1120a37163524352022e", - "is_verified": false, - "line_number": 10773 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "e42fda6642fe1668d29552f218bce4cfa2619ba0", - "is_verified": false, - "line_number": 10789 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "60d53af452a0b65bbe4c4584dd41b3e60cd6adb5", - "is_verified": false, - "line_number": 10801 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bbd8f9b13b814496e2a764697fb4d824d43470ca", - "is_verified": false, - "line_number": 10809 - }, - { - "type": "Base64 High Entropy String", - "filename": "npm-shrinkwrap.json", - "hashed_secret": "bc001a988dc93a1d9f0b811c8b6f5ed71cd922e8", - "is_verified": false, - "line_number": 10815 - } - ], - "src\\cloud\\providers\\azure\\credentials.ts": [ - { - "type": "Secret Keyword", - "filename": "src\\cloud\\providers\\azure\\credentials.ts", - "hashed_secret": "5d4bc2f0a30deac53e208ba65fee21b59aa1db84", - "is_verified": false, - "line_number": 90 - } - ], - "src\\cloud\\providers\\google\\secrets.ts": [ - { - "type": "Secret Keyword", - "filename": "src\\cloud\\providers\\google\\secrets.ts", - "hashed_secret": "30118aa1aa8a06fa5365743b3a5db69fc62b9760", - "is_verified": false, - "line_number": 30 - } - ], - "src\\cloud\\providers\\ibm\\credentials.ts": [ - { - "type": "Secret Keyword", - "filename": "src\\cloud\\providers\\ibm\\credentials.ts", - "hashed_secret": "9644fcf2eabce70c2db66522e3b310f569698ee1", - "is_verified": false, - "line_number": 105 - } - ], - "src\\cloud\\shared\\queue.ts": [ - { - "type": "Secret Keyword", - "filename": "src\\cloud\\shared\\queue.ts", - "hashed_secret": "2520b7e47eaa6d2aa4c55e7eb2024f24a9b930a1", - "is_verified": false, - "line_number": 37 - } - ] - }, - "generated_at": "2021-07-15T19:19:02Z" + "results": {}, + "generated_at": "2021-08-10T13:39:01Z" } diff --git a/devops/docker/detect_secrets/README.md b/devops/docker/detect_secrets/README.md index d3972dfb..df4a562a 100644 --- a/devops/docker/detect_secrets/README.md +++ b/devops/docker/detect_secrets/README.md @@ -117,4 +117,12 @@ $ docker run --rm -it -v $(pwd):/opt community.opengroup.org:5555/osdu/platform/ ```bash $ docker run --rm -it -v $(pwd):/opt community.opengroup.org:5555/osdu/platform/domain-data-mgmt-services/seismic/seismic-dms-suite/seismic-store-service/seismic-store-service-detect-secrets:latest detect-secrets-hook --baseline /opt/devops/docker/detect_secrets/.secrets.baseline $(git ls-files) +``` + +##### False positives + +Add next comment above the line (in the proper file) that has been detected and is a false positives + +``` +pragma: allowlist nextline secret ``` \ No newline at end of file diff --git a/devops/osdu/scanners/scan-for-secrets-node.yml b/devops/osdu/scanners/scan-for-secrets-node.yml index f111b21d..0ceeaca4 100644 --- a/devops/osdu/scanners/scan-for-secrets-node.yml +++ b/devops/osdu/scanners/scan-for-secrets-node.yml @@ -2,6 +2,8 @@ scan-for-secrets: image: community.opengroup.org:5555/osdu/platform/domain-data-mgmt-services/seismic/seismic-dms-suite/seismic-store-service/seismic-store-service-detect-secrets:latest tags: ["osdu-small"] stage: scan - needs: ['compile-and-unit-test'] + needs: + - job: compile-and-unit-test + artifacts: false script: - - detect-secrets-hook --exclude-files devops/docker/detect_secrets/.secrets.baseline --exclude-files devops/osdu/scanners/scan-for-secrets-node.yml --exclude-files npm-shrinkwrap.json --exclude-files package.json --exclude-files devops/scripts/azure_jwt_client.py --exclude-files src/cloud/providers/azure/keyvault.ts --exclude-files tests/utest/cloud/azure/keyvault.ts --baseline devops/docker/detect_secrets/.secrets.baseline $(git ls-files) \ No newline at end of file + - detect-secrets-hook --exclude-files npm-shrinkwrap.json --exclude-files package.json --exclude-files devops/osdu/scanners/scan-for-secrets-node.yml --baseline devops/docker/detect_secrets/.secrets.baseline $(git ls-files) \ No newline at end of file diff --git a/devops/scripts/azure_jwt_client.py b/devops/scripts/azure_jwt_client.py index 4bdb0b4f..fd3dda00 100644 --- a/devops/scripts/azure_jwt_client.py +++ b/devops/scripts/azure_jwt_client.py @@ -50,7 +50,8 @@ def get_invalid_token(): } ''' - return "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkdW1teUBkdW1teS5jb20iLCJpc3MiOiJkdW1teUBkdW1teS5jb20iLCJhdWQiOiJkdW1teS5kdW1teS5jb20iLCJpYXQiOjE1NTYxMzcyNzMsImV4cCI6MTU1NjIzMDk3OSwicHJvdmlkZXIiOiJkdW1teS5jb20iLCJjbGllbnQiOiJkdW1teS5jb20iLCJ1c2VyaWQiOiJkdW1teXRlc3Rlci5jb20iLCJlbWFpbCI6ImR1bW15dGVzdGVyLmNvbSIsImF1dGh6IjoiIiwibGFzdG5hbWUiOiJkdW1teSIsImZpcnN0bmFtZSI6ImR1bW15IiwiY291bnRyeSI6IiIsImNvbXBhbnkiOiIiLCJqb2J0aXRsZSI6IiIsInN1YmlkIjoiZHVtbXlpZCIsImlkcCI6ImR1bW15IiwiaGQiOiJkdW1teS5jb20iLCJkZXNpZCI6ImR1bW15aWQiLCJjb250YWN0X2VtYWlsIjoiZHVtbXlAZHVtbXkuY29tIiwianRpIjoiNGEyMWYyYzItZjU5Yy00NWZhLTk0MTAtNDNkNDdhMTg4ODgwIn0.nkiyKtfXXxAlC60iDjXuB2EAGDfZiVglP-CyU1T4etc" + # pragma: allowlist nextline secret + return "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkdW1teUBkdW1teS5jb20iLCJpc3MiOiJkdW1teUBkdW1teS5jb20iLCJhdWQiOiJkdW1teS5kdW1teS5jb20iLCJpYXQiOjE1NTYxMzcyNzMsImV4cCI6MTU1NjIzMDk3OSwicHJvdmlkZXIiOiJkdW1teS5jb20iLCJjbGllbnQiOiJkdW1teS5jb20iLCJ1c2VyaWQiOiJkdW1teXRlc3Rlci5jb20iLCJlbWFpbCI6ImR1bW15dGVzdGVyLmNvbSIsImF1dGh6IjoiIiwibGFzdG5hbWUiOiJkdW1teSIsImZpcnN0bmFtZSI6ImR1bW15IiwiY291bnRyeSI6IiIsImNvbXBhbnkiOiIiLCJqb2J0aXRsZSI6IiIsInN1YmlkIjoiZHVtbXlpZCIsImlkcCI6ImR1bW15IiwiaGQiOiJkdW1teS5jb20iLCJkZXNpZCI6ImR1bW15aWQiLCJjb250YWN0X2VtYWlsIjoiZHVtbXlAZHVtbXkuY29tIiwianRpIjoiNGEyMWYyYzItZjU5Yy00NWZhLTk0MTAtNDNkNDdhMTg4ODgwIn0.nkiyKtfXXxAlC60iDjXuB2EAGDfZiVglP-CyU1T4etc" if __name__ == '__main__': get_id_token() \ No newline at end of file diff --git a/src/cloud/providers/azure/credentials.ts b/src/cloud/providers/azure/credentials.ts index 1fa16133..140c9c7b 100644 --- a/src/cloud/providers/azure/credentials.ts +++ b/src/cloud/providers/azure/credentials.ts @@ -87,6 +87,7 @@ export class AzureCredentials extends AbstractCredentials { form: { grant_type: 'client_credentials', client_id: clientID, + // pragma: allowlist nextline secret client_secret: clientSecret, resource: appResourceID }, diff --git a/src/cloud/providers/azure/keyvault.ts b/src/cloud/providers/azure/keyvault.ts index b89f1881..d9519b5d 100644 --- a/src/cloud/providers/azure/keyvault.ts +++ b/src/cloud/providers/azure/keyvault.ts @@ -24,6 +24,7 @@ export class Keyvault { public static REDIS_KEY = 'redis-password'; public static SP_TENANT_ID = 'app-dev-sp-tenant-id'; public static SP_CLIENT_ID = 'app-dev-sp-username'; + // pragma: allowlist nextline secret public static SP_CLIENT_SECRET = 'app-dev-sp-password'; public static SP_APP_RESOURCE_ID = 'aad-client-id'; public static DATA_PARTITION_STORAGE_ACCOUNT_NAME = 'sdms-storage-account-name'; diff --git a/src/cloud/providers/google/secrets.ts b/src/cloud/providers/google/secrets.ts index 18446ebd..a99566c7 100644 --- a/src/cloud/providers/google/secrets.ts +++ b/src/cloud/providers/google/secrets.ts @@ -27,6 +27,7 @@ export class Secrets{ public async getSecret(secretName: string, required = true): Promise { try { + // pragma: allowlist nextline secret const [secret] = await this.client.accessSecretVersion({ name: `projects/${ConfigGoogle.SERVICE_CLOUD_PROJECT}/secrets/${secretName}/versions/latest` }); diff --git a/src/cloud/providers/ibm/credentials.ts b/src/cloud/providers/ibm/credentials.ts index c7f2fd38..e4f307ba 100644 --- a/src/cloud/providers/ibm/credentials.ts +++ b/src/cloud/providers/ibm/credentials.ts @@ -102,6 +102,7 @@ export class Credentials extends AbstractCredentials { ); const crdntls = { username: IbmConfig.KEYCLOAK_USERNAME, + // pragma: allowlist nextline secret password: IbmConfig.KEYCLOAK_PASSWORD, grantType: IbmConfig.KEYCLOAK_GRANTTYPE, clientId: IbmConfig.KEYCLOAK_CLIENTID, diff --git a/src/cloud/shared/queue.ts b/src/cloud/shared/queue.ts index e445c929..4e6a9756 100644 --- a/src/cloud/shared/queue.ts +++ b/src/cloud/shared/queue.ts @@ -34,6 +34,7 @@ export class StorageJobManager { }; if (cacheParams.KEY) { + // pragma: allowlist nextline secret redisx['password'] = cacheParams.KEY; if (!cacheParams.DISABLE_TLS) { redisx['tls'] = { servername: cacheParams.ADDRESS }; diff --git a/tests/utest/cloud/azure/keyvault.ts b/tests/utest/cloud/azure/keyvault.ts index 12745b9b..bbeac24d 100644 --- a/tests/utest/cloud/azure/keyvault.ts +++ b/tests/utest/cloud/azure/keyvault.ts @@ -11,6 +11,7 @@ const mockRedisKey = 'mockRedisKey'; const mockRedisHost= 'mockRedisHost'; const mockSpTenantID = 'mockSpTenantID'; const mockSpClientID = 'mockSpClientID'; +// pragma: allowlist nextline secret const mockSpClientSecret = 'mockSpClientSecret'; const mockSpAppSourceID = 'mockSpAppSourceID'; const mockSauthProvider = 'mockSauthProvider'; -- GitLab From 6a6d0bee645427a4d1a675e34f3e76f98cbc2fb8 Mon Sep 17 00:00:00 2001 From: Konstantin Khottchenkov Date: Fri, 13 Aug 2021 07:57:15 +0000 Subject: [PATCH 10/12] test: review retry on 5xx implementation --- tests/e2e/postman_collection.json | 714 ++++++++---------------------- 1 file changed, 182 insertions(+), 532 deletions(-) diff --git a/tests/e2e/postman_collection.json b/tests/e2e/postman_collection.json index 71a645df..e4aa636e 100644 --- a/tests/e2e/postman_collection.json +++ b/tests/e2e/postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "2fdb1165-b3c5-4641-b322-d7576f6662ea", + "_postman_id": "29c4591d-57e6-4a83-855f-bfbbd4a09f70", "name": "SDMS-E2E ver.xxx", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -16,8 +16,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -34,7 +33,6 @@ " pm.expect(pm.response.text()).to.include(\"service OK\");", " });", "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -61,23 +59,24 @@ " postman.setEnvironmentVariable(\"maxAmountOfRetries\", 4);\r", "}\r", "\r", - "postman.setGlobalVariable(\"retryOnFailure\", (failureCode, numberOfRetrys) => {\r", - " \r", - " var key = request.name + '_counter';\r", + "Object.prototype.retryOnFailure = function(postman, failureCode, requestName, numberOfRetrys) {\r", + " var key = requestName + '_counter';\r", " var execCounter = postman.getEnvironmentVariable(key) || 1;\r", - "\r", " var sleepDuration = 1000;\r", " var waitUntilTime = new Date().getTime() + sleepDuration;\r", - " if (responseCode.code >= failureCode && execCounter <= numberOfRetrys) {\r", + " if (execCounter <= numberOfRetrys) {\r", " while (new Date().getTime() < waitUntilTime) {\r", " // Do Nothing -> Wait\r", " }\r", - " console.log('Retrying: ' + request.name + '\\nGot: ' + responseCode.code + '\\nWaiting: ' + sleepDuration / 1000 + 'sec \\nRetry Number: ' + execCounter + ' of max ' + numberOfRetrys);\r", + " console.log('Retrying: ' + requestName + '\\nGot: ' + failureCode + '\\nWaiting: ' + sleepDuration / 1000 + 'sec \\nRetry Number: ' + execCounter + ' of max ' + numberOfRetrys);\r", " execCounter++;\r", " postman.setEnvironmentVariable(key, execCounter);\r", - " postman.setNextRequest(request.name);\r", + " postman.setNextRequest(requestName);\r", + " } else {\r", + " console.log('Max amount of retries is reached after ' + numberOfRetrys + ' attempts ');\r", + " postman.clearEnvironmentVariable(key);\r", " }\r", - "});" + "}" ], "type": "text/javascript" } @@ -121,8 +120,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -133,8 +131,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(jsonData.status).to.eql(\"running\");", " });", - " ", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -184,8 +180,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -198,8 +193,6 @@ " pm.expect(jsonData.name).to.eql(pm.environment.get(\"tenant\"));", " pm.expect(jsonData.gcpid).to.exist;", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -244,8 +237,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -255,8 +247,6 @@ " pm.test(\"Body is correct\", function () {", " pm.response.to.have.body(\"sd://\" + pm.environment.get(\"datapartition\"));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -314,8 +304,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404 or 403\", function () {", @@ -343,8 +332,6 @@ " }", " };", " };", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -396,8 +383,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404 or 403\", function () {", @@ -407,8 +393,6 @@ " if (pm.response.headers.get('service-provider') !== 'google') {", "\t postman.setNextRequest(\"SUBPROJECT REGISTER\");", " }", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -487,8 +471,6 @@ " pm.test(\"Status code is 400\", function () {", " pm.response.to.have.status(400);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -566,8 +548,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -586,8 +567,6 @@ " pm.expect(jsonData.storage_location).to.eql('US-CENTRAL1');", " }", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", " ", " postman.setNextRequest(\"SUBPROJECT GET NEW\");", "}" @@ -648,8 +627,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -725,8 +703,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -799,8 +776,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -879,8 +855,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -960,8 +935,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1046,8 +1020,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -1126,8 +1099,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1238,8 +1210,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1391,8 +1362,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -1474,15 +1444,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -1549,8 +1516,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -1629,8 +1595,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1689,8 +1654,6 @@ " pm.test(\"ctag\", function () {", " postman.setEnvironmentVariable(\"ctag\", jsonData.ctag);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -1746,8 +1709,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1759,8 +1721,6 @@ " pm.test(\"sbit_count\", function () {", " pm.expect(jsonData.sbit_count).to.eql(1);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -1833,8 +1793,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1850,8 +1809,6 @@ " pm.test(\"Data List\", function () {", " pm.expect(jsonData.length).gte(1);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -1899,8 +1856,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -1972,8 +1928,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -1994,8 +1949,6 @@ " pm.test(\"Filemetadata is added\", function () {", " pm.expect(jsonData.filemetadata).to.exist;", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2063,8 +2016,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -2074,8 +2026,6 @@ " pm.test(\"Validate ctag\", function () {", " pm.expect(pm.response.json()).eql(false);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2136,8 +2086,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -2148,8 +2097,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(pm.response.text()).to.include(\"[false,true,false,false,true]\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2206,8 +2153,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -2217,8 +2163,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(pm.response.text()).to.include(\"[-1,-1,-1,-1,1021]\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2275,8 +2219,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -2292,8 +2235,6 @@ " pm.test(\"Read Directories\", function () {", " pm.expect(jsonData.directories.length).to.eql(0);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2352,8 +2293,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -2367,8 +2307,6 @@ " pm.expect(jsonData.write).to.eql(true);", " pm.expect(jsonData.delete).to.eql(true);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2425,15 +2363,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2489,8 +2424,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -2506,8 +2440,6 @@ " pm.test(\"Data List\", function () {", " pm.expect(jsonData.length).gte(0);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2555,8 +2487,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -2638,15 +2569,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2702,8 +2630,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -2781,8 +2708,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -2792,8 +2718,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(pm.response.text()).to.include(\"service OK\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2857,8 +2781,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -2900,8 +2823,6 @@ " pm.expect(jsonData.sbit).not.to.eql(null);", " postman.setEnvironmentVariable(\"sbit\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -2959,8 +2880,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 423 locked\", function () {", @@ -2970,8 +2890,6 @@ " pm.test(\"Read a data locked for writing\", function () {", " pm.expect(pm.response.text()).to.include('locked for write');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3036,15 +2954,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3113,8 +3028,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 423 locked\", function () {", @@ -3124,8 +3038,6 @@ " pm.test(\"Write a data already locked for writing\", function () {", " pm.expect(pm.response.text()).to.include('locked for write');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3190,8 +3102,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3207,8 +3118,6 @@ " pm.test(\"sbit_count\", function () {", " pm.expect(jsonData.sbit_count).to.eql(1);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3277,8 +3186,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 404\", function () {", @@ -3288,8 +3196,6 @@ " pm.test(\"Close data using wrong sbit\", function () {", " pm.expect(pm.response.text()).to.include('locked with different ID');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3353,8 +3259,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3370,8 +3275,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3435,8 +3338,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3468,8 +3370,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3519,8 +3419,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3537,8 +3436,6 @@ " pm.expect(jsonData.sbit).not.to.eql(null);", " postman.setEnvironmentVariable(\"sbit_new\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3603,8 +3500,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 423 locked\", function () {", @@ -3614,8 +3510,6 @@ " pm.test(\"Read a data locked for writing\", function () {", " pm.expect(pm.response.text()).to.include('locked for write');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3680,8 +3574,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 423 locked\", function () {", @@ -3691,8 +3584,6 @@ " pm.test(\"Write a data already locked for writing\", function () {", " pm.expect(pm.response.text()).to.include('locked for write');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3757,8 +3648,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3774,8 +3664,6 @@ " pm.test(\"sbit_count\", function () {", " pm.expect(jsonData.sbit_count).to.eql(1);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3844,8 +3732,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 404\", function () {", @@ -3855,8 +3742,6 @@ " pm.test(\"Close data using wrong sbit\", function () {", " pm.expect(pm.response.text()).to.include('locked with different ID');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -3920,8 +3805,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -3937,8 +3821,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4002,8 +3884,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4035,8 +3916,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4086,8 +3965,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4101,8 +3979,6 @@ " pm.expect(jsonData.sbit).not.to.eql(null);", " postman.setEnvironmentVariable(\"sbit_new_01\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4171,8 +4047,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 423 locked\", function () {", @@ -4182,8 +4057,6 @@ " pm.test(\"Write a data locked for reading\", function () {", " pm.expect(pm.response.text()).to.include('locked for read');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4248,8 +4121,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4262,8 +4134,6 @@ " pm.expect(jsonData.sbit_count).to.eql(2);", " postman.setEnvironmentVariable(\"sbit_new_02\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4328,8 +4198,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4345,8 +4214,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).not.to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4410,8 +4277,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4427,8 +4293,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4492,8 +4356,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4525,8 +4388,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4576,15 +4437,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4634,8 +4492,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4677,8 +4534,6 @@ " pm.expect(jsonData.sbit).not.to.eql(null);", " postman.setEnvironmentVariable(\"sbit\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4736,8 +4591,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4753,8 +4607,6 @@ " pm.test(\"sbit\", function () {", " pm.expect(jsonData.sbit).to.eql(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4818,8 +4670,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -4831,8 +4682,6 @@ " pm.test(\"readonly\", function () {", " pm.expect(jsonData.readonly).to.eql(true);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4890,15 +4739,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -4963,8 +4809,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 400 Bad Request\", function () {", @@ -4974,8 +4819,6 @@ " pm.test(\"Read a data locked for writing\", function () {", " pm.expect(pm.response.text()).to.include('cannot be locked');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5040,15 +4883,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5098,8 +4938,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -5174,8 +5013,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -5185,8 +5023,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(pm.response.text()).to.include(\"service OK\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5254,8 +5090,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -5306,8 +5141,6 @@ " pm.test(\"Check seismicmetadata\", () => {", " pm.expect(jsonData.seismicmeta_guid).not.equal(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5371,8 +5204,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -5442,8 +5274,6 @@ " pm.expect(jsonData.seismicmeta.data.binNodePositions[0].features[0].geometry.coordinates[0][1]).to.equal(242030.61);", " pm.expect(jsonData.seismicmeta.data.binNodePositions[0].features[0].geometry.type).to.equal(\"AnyCrsMultiPoint\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5503,8 +5333,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -5554,8 +5383,6 @@ " pm.test(\"Check seismicmetadata\", () => {", " pm.expect(jsonData.seismicmeta_guid).not.equal(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5638,8 +5465,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -5708,8 +5534,6 @@ " pm.expect(jsonData.seismicmeta.data.geometry.type).to.equal(\"Polygon\");", " pm.expect(jsonData.seismicmeta.meta[0].kind).to.eql(\"Unit\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5769,15 +5593,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200,404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5833,8 +5654,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -5891,8 +5711,6 @@ " var req = JSON.parse(pm.request.body.raw);", " pm.environment.set(\"dsx01_record_type\", req.seismicmeta.recordType);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -5956,15 +5774,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6041,8 +5856,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -6117,8 +5931,6 @@ " const record_type = jsonData.seismicmeta_guid.split(\":\")[1] ", " pm.expect(dsx01_record_type).to.equal(record_type)", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6178,15 +5990,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200,404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6242,8 +6051,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -6285,8 +6093,6 @@ " pm.expect(jsonData.sbit_count).to.eql(1);", " postman.setEnvironmentVariable(\"sbit\", jsonData.sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6350,15 +6156,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6435,8 +6238,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -6477,8 +6279,6 @@ " pm.test(\"sbit_count\", function () {", " pm.expect(jsonData.sbit_count).to.eql(0);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6538,15 +6338,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200,404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6602,16 +6399,13 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " postman.setEnvironmentVariable(\"sbit\", pm.response.json().sbit);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6675,8 +6469,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -6688,8 +6481,6 @@ " pm.test(\"Check seismicmetadata\", () => {", " pm.expect(jsonData.seismicmeta_guid).not.equal(null);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6757,15 +6548,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200,404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6821,8 +6609,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -6900,8 +6687,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -6911,8 +6697,6 @@ " pm.test(\"Body matches string\", function () {", " pm.expect(pm.response.text()).to.include(\"service OK\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -6989,8 +6773,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7013,8 +6796,6 @@ " pm.expect(jsonData.gtags[0]).to.eql(\"tag1\");", " pm.expect(jsonData.gtags[1]).to.eql(\"tag2\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7078,8 +6859,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7095,8 +6875,6 @@ " pm.test(\"path\", function () {", " pm.expect(jsonData.path).to.eql(pm.environment.get('testPath01'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7152,15 +6930,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7243,15 +7018,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200, 404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "} " ], "type": "text/javascript" @@ -7307,8 +7079,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7332,8 +7103,6 @@ " pm.expect(jsonData.gtags[1]).to.eql(\"tag3\");", " pm.expect(jsonData.gtags[2]).to.eql(\"tag4\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7397,8 +7166,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7414,8 +7182,6 @@ " pm.test(\"path\", function () {", " pm.expect(jsonData.path).to.eql(pm.environment.get('testPath02'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7471,15 +7237,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7562,15 +7325,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200, 404]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7626,8 +7386,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7652,8 +7411,6 @@ " pm.expect(jsonData.gtags[2]).to.eql(\"tag4\");", " pm.expect(jsonData.gtags[3]).to.eql(\"tag5\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7717,8 +7474,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7734,8 +7490,6 @@ " pm.test(\"path\", function () {", " pm.expect(jsonData.path).to.eql(pm.environment.get('testPath03'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7791,15 +7545,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7876,8 +7627,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7893,8 +7643,6 @@ " pm.test(\"Data List\", function () {", " pm.expect(jsonData.length).to.eql(0);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -7948,8 +7696,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -7977,8 +7724,6 @@ " });", " pm.expect(data2.path).to.eql(pm.environment.get('testPath01'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8032,8 +7777,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8061,8 +7805,6 @@ " });", " pm.expect(data2.path).to.eql(pm.environment.get('testPath03'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8124,8 +7866,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8137,8 +7878,6 @@ " pm.test(\"Check content type\", function () {", " pm.response.to.be.header(\"Content-Type\", \"application/json; charset=utf-8\");", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8250,8 +7989,6 @@ " pm.expect(jsonData.gtags[2]).to.eql('tag4');", " pm.expect(jsonData.gtags[3]).to.eql('tag1');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8307,8 +8044,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8331,8 +8067,6 @@ " });", " pm.expect(data1.path).to.eql(pm.environment.get('testPath02'));", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8386,8 +8120,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8401,8 +8134,6 @@ " pm.expect(jsonData.gtags[1]).to.eql('tag3');", " pm.expect(jsonData.gtags[2]).to.eql('tag4');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8466,8 +8197,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8479,8 +8209,6 @@ " pm.test(\"Tagged Data List\", function () {", " pm.expect(jsonData.length).gte(0);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8534,8 +8262,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -8555,8 +8282,6 @@ " pm.expect(data1.path).to.eql(pm.environment.get('testPath03'));", " pm.expect(data1.gtags[2]).to.eql('tag4');", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8614,15 +8339,12 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", " pm.expect(pm.response.code).to.be.oneOf([200]);", " });", - "", - " postman.setEnvironmentVariable('execCounter', 1)", "}" ], "type": "text/javascript" @@ -8678,8 +8400,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -8742,8 +8463,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -8806,8 +8526,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -8887,8 +8606,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -8971,8 +8689,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9093,8 +8810,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -9178,8 +8894,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9263,8 +8978,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9344,8 +9058,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 201\", function () {", @@ -9454,8 +9167,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9521,8 +9233,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -9623,8 +9334,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -9687,8 +9397,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9799,8 +9508,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9871,8 +9579,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -9957,8 +9664,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 202\", function () {", @@ -10020,8 +9726,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -10092,8 +9797,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10156,8 +9860,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10220,8 +9923,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -10284,8 +9986,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10367,8 +10068,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10439,8 +10139,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10501,8 +10200,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -10570,8 +10268,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -10648,8 +10345,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10708,8 +10404,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -10788,8 +10483,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10851,8 +10545,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -10924,8 +10617,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -10987,8 +10679,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code should be 400\", function () {", @@ -11050,8 +10741,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -11143,8 +10833,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -11234,8 +10923,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -11298,8 +10986,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -11441,8 +11128,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -11558,8 +11244,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -11643,8 +11328,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -11709,8 +11393,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -11826,8 +11509,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -11911,8 +11593,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -11981,8 +11662,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 400\", function () {", @@ -12043,8 +11723,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -12107,8 +11786,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -12171,8 +11849,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -12249,8 +11926,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -12335,8 +12011,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -12434,8 +12109,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -12561,8 +12235,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -12647,8 +12320,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -12729,8 +12401,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -12817,8 +12488,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 201\", function () {", @@ -12886,8 +12556,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 202\", function () {", @@ -12949,8 +12618,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13066,8 +12734,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13167,8 +12834,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13234,8 +12900,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -13294,8 +12959,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -13358,8 +13022,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -13422,8 +13085,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -13507,8 +13169,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -13587,8 +13248,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13719,8 +13379,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13841,8 +13500,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -13932,8 +13590,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " var jsonData = pm.response.json();", @@ -14018,8 +13675,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -14082,8 +13738,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -14146,8 +13801,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -14222,8 +13876,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200 or 404\", function () {", @@ -14282,8 +13935,7 @@ "script": { "exec": [ "if (responseCode.code >= 500) {", - " retry = eval(pm.globals.get(\"retryOnFailure\"));", - " retry();", + " _.retryOnFailure(postman, pm.response.code, request.name, pm.environment.get(\"maxAmountOfRetries\"));", "", "} else {", " pm.test(\"Status code is 200\", function () {", @@ -14298,8 +13950,6 @@ " pm.environment.unset('subproject');", " pm.environment.unset('appAdminEmail');", " pm.environment.unset('maxAmountOfRetries');", - " pm.environment.unset('execCounter');", - " pm.globals.unset(\"retryOnFailure\");", "}" ], "type": "text/javascript" -- GitLab From 7267d74b340b86fcd15beecdb725cbaf267de5bc Mon Sep 17 00:00:00 2001 From: Varunkumar Manohar Date: Mon, 16 Aug 2021 18:34:58 +0000 Subject: [PATCH 11/12] feat: update dataset list endpoint to return paginated results if limit and cursor query parameters are present --- NOTICE | 2 +- docs/api/openapi.osdu.yaml | 23 ++++++++++++++++++++++- docs/api/openapi.yaml | 23 +++++++++++++++++++++++ src/services/dataset/dao.ts | 25 +++++++++++++++++++------ src/services/dataset/handler.ts | 18 ++++++++++++------ src/services/dataset/model.ts | 6 ++++++ src/services/dataset/parser.ts | 22 ++++++++++++++++++++-- tests/utest/dao/dataset.ts | 22 +++++++++++----------- tests/utest/services/dataset.ts | 4 ++-- 9 files changed, 116 insertions(+), 29 deletions(-) diff --git a/NOTICE b/NOTICE index d3a29b82..3db75a0b 100644 --- a/NOTICE +++ b/NOTICE @@ -468,7 +468,7 @@ The following software have components provided under the terms of this license: - cross-spawn (from https://www.npmjs.com/package/cross-spawn) - crypto-random-string (from https://www.npmjs.com/package/crypto-random-string) - d64 (from https://www.npmjs.com/package/d64) -- dashdash (from https://github.com/trentm/node-dashdash) +- dashdash (from https://www.npmjs.com/package/dashdash) - date-and-time (from https://www.npmjs.com/package/date-and-time) - date-format (from https://www.npmjs.com/package/date-format) - date-format (from https://www.npmjs.com/package/date-format) diff --git a/docs/api/openapi.osdu.yaml b/docs/api/openapi.osdu.yaml index c63642d3..4fa9e0a4 100644 --- a/docs/api/openapi.osdu.yaml +++ b/docs/api/openapi.osdu.yaml @@ -662,7 +662,14 @@ paths: items: type: string collectionFormat: multi - + - description: 'Limit the number of datasets in the response' + in: query + name: limit + type: string + - description: 'Cursor for pagination on the datasets list' + in: query + name: cursor + type: string responses: 200: description: "The list of all datasets in the subproject if no gtags are in the request parameters. If gtags exist in the request parameters, then list all datasets that have the same list of gtags." @@ -670,6 +677,10 @@ paths: type: array items: $ref: "#/definitions/Dataset" + 201: + description: "Paginated dataset list with nextPageCursor. For documentation purposes, if limit or cursor is given, status code here is 200." + schema: + $ref: "#/definitions/PaginatedDatasets" 400: description: "Bad request." 401: @@ -2196,6 +2207,16 @@ definitions: type: string description: Next cursor for pagination. example: { datasets: ["folderA/", "folderB/", "dataset01"], nextPageCursor: "abc1234" } + + # PaginatedDatasets + PaginatedDatasets: + properties: + datasets: + type: array + items: + $ref: '#/definitions/Dataset' + nextPageCursor: + type: string # =========================================================================== # Endpoints Security Section diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 3421c16b..ae4a606e 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -672,6 +672,14 @@ paths: items: type: string collectionFormat: multi + - description: 'Limit the number of datasets in the response' + in: query + name: limit + type: string + - description: 'Cursor for pagination on the datasets list' + in: query + name: cursor + type: string responses: 200: @@ -680,6 +688,11 @@ paths: type: array items: $ref: "#/definitions/Dataset" + + 201: + description: "Paginated dataset list with nextPageCursor. For documentation purposes, if limit or cursor is given, status code here is 200." + schema: + $ref: "#/definitions/PaginatedDatasets" 400: description: "Bad request" 401: @@ -2205,6 +2218,16 @@ definitions: type: string description: Next cursor for pagination example: { datasets: ["folderA/", "folderB/", "dataset01"], nextPageCursor: "abc1234" } + + # PaginatedDatasets + PaginatedDatasets: + properties: + datasets: + type: array + items: + $ref: '#/definitions/Dataset' + nextPageCursor: + type: string # =========================================================================== # Endpoints Security Section diff --git a/src/services/dataset/dao.ts b/src/services/dataset/dao.ts index d045ef5d..a08d17d9 100644 --- a/src/services/dataset/dao.ts +++ b/src/services/dataset/dao.ts @@ -15,10 +15,10 @@ // ============================================================================ import { DatasetModel, PaginationModel } from '.'; -import { IJournal, IJournalTransaction } from '../../cloud'; -import { Config } from '../../cloud'; +import { Config, IJournal, IJournalTransaction } from '../../cloud'; import { Utils } from '../../shared'; import { Locker } from './locker'; +import { PaginatedDatasetList } from './model'; export class DatasetDAO { @@ -69,7 +69,9 @@ export class DatasetDAO { public static async list( journalClient: IJournal | IJournalTransaction, - dataset: DatasetModel): Promise { + dataset: DatasetModel, pagination: PaginationModel): + Promise { + let query: any; if (dataset.gtags === undefined || dataset.gtags.length === 0) { query = journalClient.createQuery( @@ -83,16 +85,27 @@ export class DatasetDAO { } } - let [entities] = await journalClient.runQuery(query); + if (pagination && pagination.cursor) { query = query.start(pagination.cursor); } + + if (pagination && pagination.limit) { query = query.limit(pagination.limit); } - entities = (entities) as DatasetModel[]; + const [entities, info] = await journalClient.runQuery(query); // Fix model for old entity for (let entity of entities) { entity = await this.fixOldModel(entity, dataset.tenant, dataset.subproject); } - return entities; + const output: PaginatedDatasetList = { + datasets: entities, + nextPageCursor: null + }; + + if (pagination) { + output.nextPageCursor = info.endCursor; + } + + return output; } diff --git a/src/services/dataset/handler.ts b/src/services/dataset/handler.ts index a3f3e998..28ed85a2 100644 --- a/src/services/dataset/handler.ts +++ b/src/services/dataset/handler.ts @@ -318,7 +318,10 @@ export class DatasetHandler { private static async list(req: expRequest, tenant: TenantModel, subproject: SubProjectModel) { // Retrieve the dataset path information - const dataset = DatasetParser.list(req); + const userInput = DatasetParser.list(req); + + const dataset = userInput.dataset; + const pagination = userInput.pagination; // init journalClient client const journalClient = JournalFactoryTenantClient.get(tenant); @@ -331,18 +334,21 @@ export class DatasetHandler { req.headers['impersonation-token-context'] as string); } - // Retrieve the list of datasets metadata - const datasets = await DatasetDAO.list(journalClient, dataset); + const output = await DatasetDAO.list(journalClient, dataset, pagination) as any; // attach the gcpid for fast check - for (const item of datasets) { + for (const item of output.datasets) { item.ctag = item.ctag + tenant.gcpid + ';' + DESUtils.getDataPartitionID(tenant.esd); } + // Retrieve the list of datasets metadata - return datasets; + if (output.nextPageCursor) { + return output; + } + return output.datasets; } // delete a dataset @@ -834,7 +840,7 @@ export class DatasetHandler { // check if the dataset does not exist const lockKey = datasetIN.tenant + '/' + datasetIN.subproject + datasetIN.path + datasetIN.name; if (!dataset) { - if(await Locker.getLock(lockKey)) { + if (await Locker.getLock(lockKey)) { // if a previous call fails, the dataset is not created but the lock is acquired and not released await Locker.unlock(lockKey); return; diff --git a/src/services/dataset/model.ts b/src/services/dataset/model.ts index 2f1f0623..4d24f316 100644 --- a/src/services/dataset/model.ts +++ b/src/services/dataset/model.ts @@ -14,6 +14,7 @@ // limitations under the License. // ============================================================================ + export interface IDatasetModel { name: string; tenant: string; @@ -46,4 +47,9 @@ export interface IPaginationModel { export interface IDatasetAcl { admins: string[], viewers: string[]; +} + +export interface PaginatedDatasetList { + datasets: IDatasetModel[]; + nextPageCursor: string; } \ No newline at end of file diff --git a/src/services/dataset/parser.ts b/src/services/dataset/parser.ts index af29d986..4514a90f 100644 --- a/src/services/dataset/parser.ts +++ b/src/services/dataset/parser.ts @@ -109,10 +109,28 @@ export class DatasetParser { req.query.seismicmeta === 'true']; } - public static list(req: expRequest): DatasetModel { + public static list(req: expRequest): any { const dataset = this.createDatasetModelFromRequest(req); dataset.gtags = req.query.gtag; - return dataset; + + const limit = parseInt(req.query.limit, 10); + if (limit < 0) { + throw (Error.make(Error.Status.BAD_REQUEST, + 'The \'limit\' query parameter can not be less than zero.')); + } + const cursor = req.query.cursor as string; + if (cursor === '') { + throw (Error.make(Error.Status.BAD_REQUEST, + 'The \'cursor\' query parameter can not be empty if supplied')); + } + let pagination = null; + if (limit || cursor) { + pagination = { limit, cursor }; + } + + // Retrieve the list of datasets metadata + return { dataset, pagination }; + } public static delete(req: expRequest): DatasetModel { diff --git a/tests/utest/dao/dataset.ts b/tests/utest/dao/dataset.ts index 3589606b..aac88986 100644 --- a/tests/utest/dao/dataset.ts +++ b/tests/utest/dao/dataset.ts @@ -14,13 +14,12 @@ // limitations under the License. // ============================================================================ -import sinon from 'sinon'; - import { Datastore } from '@google-cloud/datastore'; import { Entity } from '@google-cloud/datastore/build/src/entity'; import { RunQueryResponse } from '@google-cloud/datastore/build/src/query'; -import { google } from '../../../src/cloud/providers'; +import sinon from 'sinon'; import { Config } from '../../../src/cloud'; +import { google } from '../../../src/cloud/providers'; import { RecordLatency } from '../../../src/metrics'; import { DatasetModel } from '../../../src/services/dataset'; import { DatasetDAO } from '../../../src/services/dataset/dao'; @@ -28,6 +27,7 @@ import { Locker } from '../../../src/services/dataset/locker'; import { IPaginationModel } from '../../../src/services/dataset/model'; import { Tx } from '../utils'; + export class TestDataset { private static dataset: DatasetModel; @@ -82,13 +82,13 @@ export class TestDataset { Tx.test(async (done: any) => { this.journal.save.resolves({} as never); - await DatasetDAO.register(this.journal, { key: {'key': 'dataset_key'}, data: TestDataset.dataset }); + await DatasetDAO.register(this.journal, { key: { 'key': 'dataset_key' }, data: TestDataset.dataset }); done(); }); Tx.test(async (done: any) => { this.journal.save.resolves(); - await DatasetDAO.register(this.journal, { key: {'key': 'dataset_key'}, data: TestDataset.dataset }); + await DatasetDAO.register(this.journal, { key: { 'key': 'dataset_key' }, data: TestDataset.dataset }); done(); }); } @@ -186,7 +186,7 @@ export class TestDataset { this.journal.runQuery.resolves([expectedResult, undefined]); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(expectedResult[0]); - const result = await DatasetDAO.list(this.journal, this.dataset); + const result = await DatasetDAO.list(this.journal, this.dataset, null); Tx.checkTrue( this.journal.runQuery.calledWith(query) && result[0] === expectedResult[0], @@ -231,7 +231,7 @@ export class TestDataset { this.journal.runQuery.resolves([expectedResult, undefined]); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(expectedResult[0]); - const result = await DatasetDAO.list(this.journal, this.dataset); + const result = await DatasetDAO.list(this.journal, this.dataset, null); Tx.checkTrue( this.journal.runQuery.calledWith(query) && result[0] === expectedResult[0], @@ -274,7 +274,7 @@ export class TestDataset { this.journal.getQueryFilterSymbolContains.returns('='); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(expectedResult[0]); - const result = await DatasetDAO.list(this.journal, this.dataset); + const result = await DatasetDAO.list(this.journal, this.dataset, null); Tx.checkTrue( this.journal.runQuery.calledWith(query) && result[0] === expectedResult[0], @@ -320,7 +320,7 @@ export class TestDataset { this.journal.getQueryFilterSymbolContains.returns('='); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(expectedResult[0]); - const result = await DatasetDAO.list(this.journal, this.dataset); + const result = await DatasetDAO.list(this.journal, this.dataset, null); Tx.checkTrue( this.journal.runQuery.calledWith(query) && result[0] === expectedResult[0], @@ -329,7 +329,7 @@ export class TestDataset { }); Tx.test(async (done: any) => { - Config.CLOUDPROVIDER='azure' + Config.CLOUDPROVIDER = 'azure'; this.dataset.gtags = ['tagA', 'tagB']; const expectedResult = [ { @@ -367,7 +367,7 @@ export class TestDataset { this.journal.getQueryFilterSymbolContains.returns('CONTAINS'); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(expectedResult[0]); - const result = await DatasetDAO.list(this.journal, this.dataset); + const result = await DatasetDAO.list(this.journal, this.dataset, null); Tx.checkTrue( this.journal.runQuery.calledWith(query) && result[0] === expectedResult[0], diff --git a/tests/utest/services/dataset.ts b/tests/utest/services/dataset.ts index 16348bb7..afc7d140 100644 --- a/tests/utest/services/dataset.ts +++ b/tests/utest/services/dataset.ts @@ -444,7 +444,7 @@ export class TestDatasetSVC { Tx.testExp(async (done: any, expReq: expRequest, expRes: expResponse) => { this.sandbox.stub(TenantDAO, 'get').resolves({} as any); this.sandbox.stub(Auth, 'isReadAuthorized').resolves(undefined); - this.sandbox.stub(DatasetDAO, 'list').resolves([{}] as DatasetModel[]); + this.sandbox.stub(DatasetDAO, 'list').resolves({ datasets: [{} as DatasetModel], nextPageCursor: null }); this.sandbox.stub(Auth, 'isLegalTagValid').resolves(true); this.sandbox.stub(SubProjectDAO, 'get').resolves(this.testSubProject); this.sandbox.stub(DESUtils, 'getDataPartitionID').returns('datapartition'); @@ -1039,7 +1039,7 @@ export class TestDatasetSVC { this.journal.runQuery.resolves([[{}], {}] as never); this.sandbox.stub(DatasetDAO, 'fixOldModel').resolves(); this.sandbox.stub(SubProjectDAO, 'get').resolves(this.testSubProject); - await DatasetDAO.list(this.journal, this.dataset); + await DatasetDAO.list(this.journal, this.dataset, null); done(); }); } -- GitLab From f8539d3f626932650119753375c99e2c18f3b62f Mon Sep 17 00:00:00 2001 From: Diego Molteni Date: Tue, 17 Aug 2021 18:22:43 +0000 Subject: [PATCH 12/12] fix refresh code condition --- src/services/imptoken/dao.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/services/imptoken/dao.ts b/src/services/imptoken/dao.ts index ca2934d6..aea33458 100644 --- a/src/services/imptoken/dao.ts +++ b/src/services/imptoken/dao.ts @@ -91,7 +91,11 @@ export class ImpTokenDAO { try { await request(options); } catch (error) { - throw (Error.make(Error.Status.BAD_REQUEST, 'The impersonation token cannot be refreshed.')); + // For any code different than 4xx the imptoken can be refreshed + // This is a temporary fix to handle unavailability of client infrastructure + if (error.statusCode >= 400 && error.statusCode <= 499) { + throw (Error.make(Error.Status.BAD_REQUEST, 'The impersonation token cannot be refreshed.')); + } } } -- GitLab